風柳メモ

ソフトウェア・プログラミング関連の覚書が中心

『はてなID ⇔ Twitterユーザー名の相互変換API』の動作について

気がついてみたら、

といくつかの場所で使われているはてなID ⇔ Twitterユーザー名の相互変換APIを作ってみました - 風柳メモですが(動作サンプルはこちら)。
以下、特に断り書きのない限り『はてなID ⇔ Twitterユーザー名の相互変換API』のことを『本API』と称します。


念のため、

  • はてなID ⇔ Twitterユーザー名の関連付けの情報は、はてなが公開しているサービスである、はてな検索から取得したものであること。
  • 元となっている情報が、基本的に自己申告によるものであるため、本APIによる情報(はてなIDとTwitterユーザー名等)も、必ずしも同一人物のものである保証はないこと。

を申し添えておきます。


以下はその詳細な事情説明になります。

本APIの情報取得の仕組みについて

  1. はてな検索の“アドレスから”“Twitter”を選んで[検索]を押した際に出てくるURLのページをローカルPCで取得、以下、“次の50件>”を次々と辿る形で、最後のページまで取得を継続。
    得られたデータは平行してGoogle App Engine上のサービスへと送り、はてなID(及びアイコンのURLとユーザ名)とTwitterユーザ名を関連づけてデータベース(datastore)に登録。
    結果は現状で1万4千件以上。50件/ページなので、計280ページ強。
    この操作は、はてな側にも当方の管理下にあるPCやサービス等にも相応の負荷がかかるため、一日一回のみ実施。
  2. 本API(http://hatena-anohito.appspot.com/c/?hatena_id=〜)がコールされると、
    • 対応するTwitterユーザ名がない場合、JSONのhatena/twitter以下の要素を空にして返す。
    • 対応するTwitterユーザ名がある場合、Twitter側のusers/show APIによりTwitterの情報(名前・アイコン等)を取得して返す。
      Twitter側情報は一定時間キャッシュされている。キャッシュ期間内であれば、Twitter APIはコールせずにキャッシュ内の情報を返す。
  3. 本API(http://hatena-anohito.appspot.com/c/?twitter_screen_name=〜)がコールされると、
    • 対応するはてなIDがない場合、JSONのhatena/twitter以下の要素を空にして返す。
    • 対応するはてなIDがある場合、Twitter側のusers/show APIによりTwitterの情報(名前・アイコン等)を取得し、hatena以下の要素と共に返す。
      これも上記と同様のキャッシュ操作を行なう。

なお、TwitterのAPIであるusers/showについては、当方のTwitterユーザ名:furyuteiの権限で実施しているため、情報が保護されていた場合、Twitter側情報が取得出来ない場合もあり得えます。

本APIにてIDの関連性が保証できないのはなぜか?について

この API は、 http://www.hatena.ne.jp/はてなID のページから Twitter にリンクされてる場合に Twitter ID を抽出できます。

Twitter で「はてなダイアラー」ときゃっふきゃっふしよう! - IT戦記

こちらの記事で紹介されてる「はてなID ⇔ Twitterユーザー名の相互変換API」で変換可能なのは
おそらく、はてなプロフィールにTwitterのユーザ名を「全体に公開」で記入している場合のみと思われます。

念のため書いておきますけど、...で紹介されてる「...」で変換可能なのは... - ナノ - ナノ - はてなハイク

で推察されている通り、本APIで関連性が確認出来るのは、はてなプロフィールで“全体に公開”されているデータのみであり、かつ、

Myはてなの Twitter アカウント設定欄は、自由入力欄として従来通りの運用を行います
Myはてな「アカウント・アドレス設定」項目に Twitter アカウントの設定欄がありますが、こちらは、ご自身のプロフィールとして Twitter アカウントを広く第三者もしくはフレンドに宣伝するための機能として運用します。設定は、ユーザー自身が手入力で行う必要があり、特に他サービスでの連携設定に本稿が連動するといった実装は行いません。

はてなIDとTwitterアカウント紐付け情報の今後の取扱いについて - はてなブックマーク日記 - 機能変更、お知らせなど

の公式見解にも有るとおり、プロフィールページの情報は

  • 各自が手動で記入したものであること(=自己申告)。
  • はてなのTwitter連携サービスとは、特に連動はしていないこと*1

となっています。


このため、例えば、特定個人が故意あるいは事故により、自己のものとは別のTwitterユーザ名を登録していた、といったケースにおいては、本APIは、正しい関連性を保証出来ません

また、上述した本APIの情報取得の仕組みより、はてなやTwitterからの情報がキャッシュされている期間に追加/削除/変更などがなされた場合についても、本APIは情報の確度を保証出来ません。
利用する際には、これらのことを充分ご留意願います。
なお、はてなダイアリーとTwitterとの連携機能を利用して(例えば、設定によってはダイアリーのタイトル横に表示されるTwitterのURLを確認するなど)ある程度確度を上げることは可能ではありますが、応答性の問題等もあり、今のところ実装する予定はありません。


これらのようなケースが存在しうるため、なるべくなら、はてな側で公式に本APIのような機能を提供して欲しいところではあるのですが、

  • はてなIDとTwitterアカウントの紐付け情報は、はてなは基本的にそれを公開された情報として扱う
    • ただし積極的に第三者に開示することは行わない。例えばMyはてなのプロフィールのように連携を行ったサービス以外での場所へは、公開は行わない
はてなIDとTwitterアカウント紐付け情報の今後の取扱いについて - はてなブックマーク日記 - 機能変更、お知らせなど

となっていますし、その他にも様々な事情により、実現は困難なのかも知れません。

*1:ただ、はてなブックマーク連携の初期のころ、OAuth設定したアカウントが自動的にプロフィール欄に設定されていたような記憶があるのだが…あくまで当方の記憶であり、その真偽は定かではない。