名刺管理サービス「Eight」から連絡先情報をエクスポートする

名刺管理サービス「Eight」

はじめに

日々増え続ける名刺の管理には、もうずいぶん前からEightを利用している。
データも正確で検索もし易く相手も利用していれば名刺情報の更新が届くなど非常に便利に使っているが、唯一あったら良いなと思っているのがデータのエクスポート機能だ。

自分が退職するときにも、関わりのあった皆に退職報告をしようと名刺情報をダウンロードしようと思ったが見つからなかった。
登録した名刺情報をエクスポートしたいという要望は有るようだが、まだ機能は実装されていないようだ。

そこで、無ければ自分で何とかするということで、自分の管理している名刺情報をエクスポートするためのJavascriptを書いた。ログインしている画面 (Google Chrome) の Console から実行する簡易コードだ。

2014/03/23追記:Eightサービスがリニューアルして現在は動かなくなっています。対応したものを名刺情報をiPhone連絡先へインポートする方法(またはEightデータをvCard形式でエクスポートするブックマークレットを作りました) – noriaki blog はてな出張所としてエントリ書きました。こちらをご覧ください。

2014/03/23追記:また、コメント欄でMauriceさんからEight / 8card エクスポート Chromeエクステンションを作ったとご連絡いただきました。

ご注意点

  • あくまでも自分の管理している名刺情報(名前、会社、電話番号、メールアドレス)が取得できるだけ
  • 使い方をよく読み、Javascriptコードの内容が理解できる方のみ実行することをオススメする
  • 動作は無保証であり何らかの問題が起こっても責任は取れない
  • Eightサービス側の仕様変更等により使えなくなることもある
  • 利用規約はざっと読んで問題無いと思われるがEightサービスから怒られたら謝る

使い方

  1. EightへGoogle Chromeを使ってログイン
  2. Ctrl + Shift + JなどでConsole画面を開く
  3. 下記のJavascriptコード1を実行する
  4. 100件ずつ名刺情報を取得するので全件取得完了したらJavascriptコード2を実行する
  5. 結果として表示された部分をコピーしてExcel等にペーストする

Javascriptコード1

var res = [];
function recursive_get_data(res, page) {
    $.ajax({
        type: "GET",
        url: request_url({ page: page }),
        dataType: "json",
        success: function(data) {
            var data_array = data.result;
            $.each(data_array, function(i,obj) {
                $.each(obj, function(month,cards) {
                    if(cards.length === 0) { return }
                    $.each(cards, function(j, card) {
                        var person = card.person;
                        var info = person.personal_cards[0].eight_card || person.personal_cards[0].friend_card;
                        var r = [person.id];
                        r.push(info.front_company_name === "" ? info.back_company_name : info.front_company_name);
                        r.push(info.front_full_name === "" ? info.back_full_name : info.front_full_name);
                        r.push(info.front_full_name_reading === "" ? info.back_full_name_reading : info.front_full_name_reading);
                        r.push(info.front_tel1 === "" ? info.back_tel1 : info.front_tel1);
                        r.push(info.front_email === "" ? info.back_email : info.front_email);
                        r.push(month);
                        res.push(r);
                    });
                });
            });
            console.log(data.context, page);
            if(page < data.context.total_pages) {
                recursive_get_data(res, page + 1);
            }
        }
    });
}
recursive_get_data(res, 1);

function request_url(option) {
    return "https://8card.net/people/display_personal_cards.json?0.13670155755244195&_method=get&sort=5&transcribing=0&per_page=100&web=1&use_paginate=1&tags=&index=&keyword=&page=" + option.page;
}

Javascriptコード2

console.log($.map(res, function(array, i) { return array.join("\t"); }).join("\n"));

最後に

Eightさん、いつもありがたく使わせてもらってます。有料機能でも良いのでエクスポート機能を早く提供してください。

スポンサード

名刺管理サービス「Eight」から連絡先情報をエクスポートする” への14件のコメント

  1. JAVASCRIPTコード1を実行すると
    以下のエラーメッセージが出てしまいました。
    わかる方がいらっしゃいましたら、教えて下さい。

    Uncaught TypeError: Cannot read property ‘length’ of undefined application-44b79cc665f3fd48ebab451ec657539a.js:14
    G.extend.each application-44b79cc665f3fd48ebab451ec657539a.js:14
    $.ajax.success VM202:10
    h application-44b79cc665f3fd48ebab451ec657539a.js:14
    d.fireWith application-44b79cc665f3fd48ebab451ec657539a.js:14
    n application-44b79cc665f3fd48ebab451ec657539a.js:22
    n

  2. いきなりすいません!
    この技って今でもつかえますか?
    コード1を実行するとこんな感じのエラーが出てしまい、
    途方にくれておりますT T
    「Uncaught TypeError: Cannot read property ‘length’ of undefined 」
    もしわかればお教えいただければ嬉しいです^ ^

  3. 突然すみません。
    検索でこちらを拝見してコメントさせていただいました。

    記事にありました、スクリプトの方を実行してみたのですが、どうやらEightのスクリプトのバージョンに変更があったのか、エラーが出てしまい実行できませんでした。

    こちら、なんらかの有効な手段はございますでしょうか??

  4. 御世話に成ります。
    私はEightを使用しておりますが、携帯の機種変更しなければならなくなりました。
    かなりのデータを集積しておりますが、移行出来ない為、参考にさせて頂こうと思いました。
    しかしながら、私はPC音痴で有り、スマートホンも使いこなせておりません。
    スマートホンは現在GALAXY SⅢ アンドロイドです。
    バカなので、記載していただいている方法が良く解りません。
    アホでも解るように御教示下さい。
    よろしゅうに、頼みます。

    • Eightは、読み込んだ名刺のデータを携帯自体に保存していないと思いますので、新しい携帯からEightのアカウントへログインできれば問題無く見られると思いますよ。つまりデータ移行は不要だと思います。

  5. 私もChromeExtensionで8のCSVエクスポート機能を作ったのですが、この使い方は8の規約に違反しています。エンジニアの習性で作ってから調べたのですが・・・。

    https://8card.net/kiyaku
    – 以下引用 –
    第12条 禁止事項
    8) Eightサービスの一部又は全部の複製・改変・編集・消去・他のプログラム等との結合・リバースエンジニアリング・逆アセンブル・逆コンパイル等又はミラーサイト構築等の行為
    9) スクレイピング、クローリング(クローラ、ロボット及びスパイダー等のプログラム)及びその他の類似の手段によってEightサービスにアクセスし、又は登録された名刺等の情報を含むEightサービスに関する情報を取得する行為
    – 以上引用 –

    このコード自体をブログやExtensionをChromeストアで公開すること自体は12条の8項に、コードやExtensionを実行させることは12条の9項に該当する可能性があります。8の中の方にも対面で聞いてみたところ「サービスを使ってくれているユーザーさんなので、今のところ警告などをするつもりはないのですが、おおっぴらにはやってほしくない」旨のニュアンスで回答されました。

    上記、ブログ内で記載されて無いようなので補足させていただきました。

  6. 途方に暮れて、藁にも縋る思いで、ずうずうしくもご質問させていただきます。大変お手数をおかけしますが、よろしくお願い致します。
    スマホ(iPhone)でFacebook経由でeightにaccountを持ち、loginし便利に使用していましたが、渡航した際にloginできなくなってしまいました。PCの方では以前と同じように見れているのでaccountがなくなっているのではないと思うのですが、スマホでの接続を再開するにはどうしたら良いかおわかりでであれば御教示いただきたいです。
    Facebook経由でeightにloginしたので、IDは自動的に設定されているのですが、Passwordの設定はしていません。ただ、操作中にpasswaordの変更を行う場面が出てきたので行い、再度loginをトライしたのですが、「エラー ログイン情報に誤りがあります。入力内容を再確認して再度入力してください」となってしまいます。そもそも、スマホから再度facebook経由でeightに再loginする画面が出てこないのが不思議です。

Noriaki Uchiyama にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>