twitter4jでtwitterアプリを作る
twitter4jというライブラリを使うとjavaで簡単にtwitterアプリを作れるということで試してみたのですが、去年の今頃にTwitterの認証の仕組みが変更されたので、参考にするネットの情報がそのまま使えないことが多くて(探し方が下手なのせいも大きいでしょう)、すぐに出来なかった。。。
一般のユーザのタイムラインを表示するだけなら特に認証はいらないのでネット上のソースがそのまま使えました。
Twitter4Jの使い方(開発メモ)
でインスタンスを作ってTwitter tw = new TwitterFactory().getInstance();
でtwitter4jのstatus型のデータが入ったリストを得る。あとはそれを出力するなり、処理をする。 問題は自分のアカウントでログインしてタイムラインを参照したり、ツイートする場合。 これは一度Twitterサイトで自分のアプリを認証させないといけないらしい。 OAuth認証とxAuth認証の二つがあるようだけど、xAuthの方はサイトにアプリの登録手続きのあとさらにメールを送って許可を得ないといけないらしいのでOAuth認証にする。 すぐに認証できるので簡単なのだが、検索してみると個人の場合は自分のサイトや組織などは空欄でいいと書いてあるところもあるが、実際はサイトは入力しなくてはいけない。 あと、Twitterやtwitterという文字はアプリの名前には含めてはいけない。 検索でヒットするいくつかのサンプルにはクラス名がTwitterを含んでいることがあるからそのまま使って作ったプログラムを登録しようとすると引っかかる。 登録できたら、登録後のページにあるConsumer KeyとConsumer Secretというところの暗号のような文字列をメモしておいて、つくろうとしているJavaアプリのソースに入力する。 しかし、この二つの値をどこに記録するかが面倒でした。 本家のサンプルコードのページにはその名のとおりサンプルのソースがある。 ただ、tw.getUserTimeLine("username");
サンプルコードを動作させるには OAuth の認証情報を twitter4j.properties 記載しておく必要があります。と書かれてある。 別ファイルをテストの段階で作るのも面倒なので、ソースでこの二つを引数で渡せないかと思って別のサイトを検索してみると Twitter4Jを使ったTwitterのOAuth認可サンプル(NI-Lab.'s ヅラッシュドット)が見つかった。 しかし、ここの
が今のtwitter4jには無いみたい。 どうするのかと思っていろいろ探したのだけど、結局、さっきの本家サンプルコードのページにOAuth認可のセクションがあって、 Twitter#setOAuthConsumer()を使うとありました。 いやあ、長かった。 結論としてはヅラッシュドットのサンプルのソースのfactory.getOAuthAuthorizedInstance(consumerKey, consumerSecret);
をTwitter twitter = factory.getOAuthAuthorizedInstance(consumerKey, consumerSecret);
に変更すればいいだけでした。 JavaDocをきちんと理解できればこんなことにはならないんですけどね。。。 とにかく表示はできたからよしとしよう。 GALAPAGOS SoftBank 005SH Twitterやブログが楽しい フルキーボード搭載 3D対応スマートフォン 30% off Twitterrific公認 twitter ツイッター フィギュア 白黒 リミテッド100個 全世界限定100個 レア ツイッターのAppで有名なTwitterrificのアイコンのフィギュアです。こちらの白黒バージョンは全世界100体限定となります。約10センチです。日本では手にすることが出来ない非常に珍しい品になります。 Twitter APIリファレンスガイドブック―Twitterアプリを開発する カフス Twitter ツイッター ! カフスボタン 今話題のTwitterのロゴをあしらったカフリンクス うーさー ダースウーサーTシャツ カリフォルニアオレンジ サイズ:L 「supercell」のメンバーにしてデザイナー 宇佐氏のマスコットキャラクター。Twitterタイムライン上に生息するが、その発言を見たものは数少ないといわれる謎の黒獣『ダースウーサー』をプリントした、宇佐氏によるデザインのTシャツ!Twitter twitter = factory.getInstance(); twitter.setOAuthConsumer(consumerKey, consumerSecret);