2011年2月12日土曜日

分かってくれ>< ツイッターAPI!① ツイッターAPIとは?

目次
―ツイッターとは何か?
―APIとは何か?
―ブラウザでツイッターAPIを使ってみる
―色々なツイッターAPIを使ってみる
―アクセス限界について


とりあえず、最近毎日のようにチェックしているウェブ漫画から。
拳道
おまけ屋の適当漫画
塩と気圧
バクバクバク
ドラゴンクエストⅨ4コマ「天使のフラ」
その他、たまにチェックする漫画リスト→[オンライン漫画]

ちょっとした感想として、おまけ屋の漫画は絵が酷いということで最初のほうがリメイクされたのですが、絵は良くなったのですが、状況が掴みづらくなったかなぁと。


ま、そんな感じで、ツイッターAPIについてなるべく分かりやすい記事を書くつもりです。と言っても文章のプロではないので期待はしないでください。

おかしな点とか、分かりにくい所とかあったら、訂正します。コメントやメールなどでアドバイスください。

そして、分かりやすかったら是非拍手をください。





― ツイッターとは何か? ―

ツイッターはご存じこういうウェブサービスです。ツイッターのユーザーを対象にした記事ですので、ツイッターの細かい説明は不要ですね。
英語にすると、 T w i t t e r です。これから先は英語表記でTwitterと書きます。その方がカッコイイので。

さて、このTwitter、公式のウェブページ以外からつぶやくことができますね。

たとえば携帯サイトから。

たとえば携帯メールから。

たとえばiPhoneアプリから。

たとえばTweenSeesmicのようなツイッタークライアントから。

たとえばEchofonChromed Birdのようなウェブブラウザのアドオンから。

たとえばTwitpictwitvideoのような別のウェブサービスから。

たとえば省略

たとえば省略

たとえば省略

たとえば省略

死亡フラグ!



Twitterのアカウントを使って別のサービスが利用できるって不思議じゃないですか?
だって、ユーザーの登録情報はTwitterが持っているんですよ?

この異常なことを実現しているのがAPIです。
Twitter社はTwitterで利用できるほとんどのサービスをAPIで提供しています。
そのAPIを使えば、Twitterの公式サイトでできることを、別のサービスでも利用できるようになります。プロフィールの取得や、タイムラインの取得、そしてツイートやフォローまで!





― APIとは何か? ―

では、そのAPIとは何でしょうか?

APIというのは長ったらしい英語の頭文字をとったもので、元の英語は、すごくどうでもいいんですけど、今ググったらApplication Programming Interfaceらしいです。
これはプログラミング関係の用語です。
プログラマさんは、自分が好きなプログラミング言語や、会社から無理矢理やれと言われたプログラミング言語を使って何かアプリケーション(ソフトウェア、アプリ、ソフト)を作ります。そのプログラミング言語には有名なCや、VisualBasic、Perlなど色々あります。あまりに色々あります。
「プログラミング言語なら何でもこい!」なんて言っている人が居たらたぶんその人は1000年に1人の天才です。全てをマスターなんて不可能というくらい色々あります。

APIは、数あるプログラミング言語の、どんなプログラミング言語からでも利用できるものと解釈できるでしょう。どんなとは言い過ぎですが、かなりの種類です。厳密には仕組みというか取り決めというか、なんかそんなんです。

そのAPIを経由してサービスを利用します。サービスというのは、Twitter APIであればツイッターですし、Windows APIというものであればウィンドウズOSの機能です。
図にするとこんな感じです。

どんなプログラミング言語からでも利用できるということは、プログラミングによって作られるものであれば、どんなものでも使うことができます。もちろん、Twitter APIはネットを利用するので、ネットワーク環境にあるものに限られますが。

頑張ればDSとかPSPとかからでもいけるんじゃないですか?
ゲーム会社はネットワーク対戦結果をつぶやけるようにするべき。もしかしたら既にしてるのかもしれないけど。


先に述べたようにTwitter社がTwitterの機能を提供するためのAPI
それがTwitter APIです。

正確にはAPI群でしょうか。ツイートするためのAPIとか、フォローするためのAPIとか、たくさんあります。

それらのAPIは関数という名前で提供されます。数学の関数とは少し違います。プログラミングに触れたことがある方はわかると思いますが、関数と言っておきながら、方法、手続き、手段といった意味があります。
例えば、

タイムラインを取得する関数

ツイートする関数

リストに関する関数

というふうに使います。関数と読んで方法と訳すという感じですかね





―ブラウザでツイッターAPIを使ってみる―

それでは、実際にTwitter APIの関数を見ていきましょう。
見ていきたいんですが、Twitter APIはHTTPの仕組みを使っているので、まずHTTPについて少し知っておかないといけません。
HTTPは聞いたことがありますね?

http://io-fia.blogspot.com/

ね?

簡単に説明すれば、IEやFireFoxなどのインターネットブラウザでウェブサイトを見るための仕組みです。詳しいことは、ITpro「HTTPの仕組み」3分間Networking 第70回以降を参考にされると良いでしょう。もしくはGoogle様に「HTTPとは」と打つと良いと思います。

簡単に説明すると、次の図のように、


リクエストライン、ヘッダ、ボディの3つを合わせたリクエスト(要求)というものを送ると、ステータスライン、ヘッダ、ボディの3つが合わさったレスポンス(応答)というものが返ってくるというものです。

……リクエストラインってなんぞ?
……ステータスラインってなんぞ?
……ヘッダってなんぞ?
……ボディってなんぞ?

もっと簡略化しましょう。APIをしっかり使う人じゃなければ、どうでも良いことですからね。

URLを送ると、ウェブページ(ボディ)が返ってきます。

私のブログを読んでいるということは、
http://io-fia.blogspot.com/
というURLをブラウザさんがGoogleに送って、Googleが今ご覧になっているこのページ、この文章を返してきたということです。


Twitter APIもこのHTTPの仕組みを利用しています。すなわち、URLを送ると、データ(ボディ)が返ってきます。
さっそく試してみましょう。細かいことはブラウザさんがやってくれます。

http://api.twitter.com/1/statuses/public_timeline.rss

ここにアクセスしてみてください。これはpublic_timeline関数(パブリックタイムライン関数)です。どう見てもただのURLですが、このAPIを使えば、世界中のツイッターユーザーが今つぶやいているツイートを取得することができます。
日本人のつぶやきがかなり多きことに気づきますね。

ときに、普通のウェブサイトと違って、文字ばっかり表示されたことにお気づきでしょうか。
普通のウェブサイトは、HTMLというデータを返してくるのですが、APIの場合、プログラマが扱いやすいようなデータを返してきます。この場合はRSSというものです。


Twitter APIはRSSの他に、XML、ATOM、JSONというデータに対応しています。

http://api.twitter.com/1/statuses/public_timeline.xml
http://api.twitter.com/1/statuses/public_timeline.atom
http://api.twitter.com/1/statuses/public_timeline.json

ブラウザがデータに対応していれば見やすくして表示してくれますが、対応していなければダダーっと文字が表示されるか、ダウンロード画面が出るでしょう。

今回はウェブブラウザを使いましたが、URLを送ってデータを取得するのは別にブラウザじゃなくても、ほとんどのプログラミング言語でできます。だから、色々なプログラミング言語で扱える物→APIですね。
そして重要なことは、このAPIはTwitterにログインしていなくても、誰でも使えるということです。Twitter以外のサービスがTwitter APIを用いてTwitterとデータのやり取りをすることで、ユーザーはTwitter以外のサービスでTwitterを利用できるのです。





―色々なツイッターAPIを使ってみる―

英語になりますが、このページの右側にTwitter APIの一覧があります。そこで色々なAPIを使ってみると面白いと思います。
ただし、Supported request methodsGETのものでかつ、Requires Authenticationfalseのものに限ります。Supported request methodsがGET以外のものは、ブラウザで簡単に扱うことができません。もちろんプログラミング言語からは簡単です。Requires Authenticationがtrueのものは、次回説明する認証をしていないと使えないものです。APIは本来プログラミング言語で扱うためのもので、ブラウザで使うものではないので、ブラウザで認証することはできません(たぶん)。

ちょっくら色々なAPIを使ってみましょう。
特定のユーザーのタイムラインを取得するためのstatuses/user_timeline関数(ユーザータイムライン関数)を使ってみましょう。
このページに説明があります。説明を見ながら解説します。

この関数のURLは次のようになっています。

http://api.twitter.com/version/statuses/user_timeline.format

ここでversionの部分はTwitter APIのバージョンです。現在は1ですので1にします。
formatの部分はSupported formatsの中から選びます。ブラウザで見るならrssかatomが良いと思います。
するとこうなります。

http://api.twitter.com/1/statuses/user_timeline.rss

この関数のSupported request methodsはGETなのでOK。Requires AuthenticationはfalseなのでOKですね。
Rate Limitedについてはまた後で説明します。

その下にParameters(パラメータ)というのがあります。これは、URLのクエリの部分に追加して送る情報です。クエリはURLの後ろに?を付けてからその後ろに書きます。
user_timeline関数の場合、user_idscreen_nameのどちらかは必ず付けないといけません。
私のスクリーン名はe_fiaですのでこうなります。

http://api.twitter.com/1/statuses/user_timeline.rss?screen_name=e_fia


これでやっとAPIにアクセスできます。

ちなみに、TwitterにはユーザID(user_id)とスクリーン名(screen_name)があります。スクリーン名は@~とするときにお馴染みのやつですね。ユーザIDは画面には見えませんが、全てのツイッターユーザーに割り振られた変えることのできない番号です。
スクリーン名は実は変えることができます。混乱を避けるために変えない方がいいですけどね。私はefiaというスクリーン名が空いたらすぐさま乗っ取るつもりですw

そうだ、パラメータは他にもあります例えば、1回に取得するツイートの数を50にして、もっと古いツイートを見たければこうします。

http://api.twitter.com/1/statuses/user_timeline.rss?screen_name=e_fia&count=50&page=2

pageを増やしていけばもっと古いツイートが見られます。
countを増やせば一回に取得できるツイートの数が増えます。限界は200です。ここで限界が200になっているので、例えばツイッターのログを保存するサービスであるtwilogで過去のつぶやきを取り込みたいときは200ずつになっています。

他のAPIも色々試してみると面白いですよ。

私のフォロワーさんの情報
http://api.twitter.com/1/statuses/followers.xml?screen_name=e_fia

私のプロフィール画像
http://api.twitter.com/1/users/profile_image/e_fia.json





―アクセス限界について―

このAPIにアクセスしてみてください。account/rate_limit_status関数です。
http://api.twitter.com/1/account/rate_limit_status.xml

こんなのが出ませんでしたか?
<hash>
<hourly-limit type="integer">150</hourly-limit>
<reset-time-in-seconds type="integer">1292056054</reset-time-in-seconds>
<reset-time type="datetime">2010-12-11T08:27:34+00:00</reset-time>
<remaining-hits type="integer">138</remaining-hits>
</hash>

このうち、hourly-limitというのは、1時間のうちにAPIを使ってTwitterにアクセスできる回数です。remaining-hitsというのは後何回アクセスできるかです。
この場合は、残り138回アクセスできます。1時間経つとリセットされます。

これがアクセス限界です。
なぜこんなものがあるのでしょうか。Twitter APIはプログラミングできるので、やろうと思えば何回も何回もアクセスできます。そんなことをされるとTwitterが重くなってしまいます。そこでAPIからアクセスできる回数を決めているのです。

ただし、限界があるのは、各々のAPIの説明ページでRate LimitedtrueになっているAPIです。falseになっているAPIはアクセス限界に達しても使うことができます(たぶん)。



さて、これで一通りツイッターAPIの基本は説明できたと思います。Twitter関係の色々なアプリケーションを作ったプログラマさんは、URLを送って返ってきたデータを表示するという簡単なことをやっていたわけです。

プログラマって意外に凄くないでしょ?

だって、データを表示することなんてプログラミングで最初に教わるHello Worldと同じやり方ですよw

ただまあ、これから説明するOAuth認証になると、プログラマの中でもさじを投げたくなる人がでてくるでしょう。

でも、詳しい説明がなかなか見つからないことと、元が英語の文書なので手に付けにくいというだけで、実は意外と単純です。

長くなってきたので続きは次回!

2 件のコメント:

  1. screan_nameをIDに変換するにはどうしたらいいでしょう?
    google教授に聞いても教えてくれませんでした><

    返信削除
  2. >@hoshi67さん

    コメントありがとうございます!

    質問の意味は、例えばe_fiaというscrean_nameがあったときに129065188といったidを取得する方法ということでしょうか?

    それでしたら、users/show関数を使うと簡単かと思われます。→users/showの説明ページ

    http://api.twitter.com/1/users/show.json?screen_name=e_fia

    こんな感じです。これでe_fiaのユーザーの様々な情報が取得できます。このなかにid: 129065188というのが書かれています。

    users/show関数以外でも、色々なAPIでユーザー情報が付随してくるので、そこでも確認ができます。

    返信削除