項目 | 必須 | 説明 |
アプリケーションのアイコン | × | 認証時に表示される? |
アプリケーション名 | ○ | tweetのfrom XXXのXXXの部分に使われる。 |
アプリケーションの説明 | ○ | 適当 |
アプリケーションのウェブサイトURL | ○ | アプリケーション名からリンクが張られる? |
所属会社/団体 | × | 適当 |
サイト | × | 適当 |
アプリケーションの種類 | ○ | クライアントはbotやその他の用途。ブラウザアプリケーションはWebアプリ。 |
コールバックURL | × | ブラウザアプリのときだけ入力 |
Default Access type | ○ | つぶやきたいときは、Read & Write。表示だけの場合は、Read-only |
Use Twitter for login | × | 不明 |
[ヅラド] Twitter4Jを使ったTwitterのOAuth認可サンプルを参考にさせていただく。
public class TwitterOAuthAccessTokenGetter { public static void main(String[] args) throws Exception { //Twitterにアプリケーションを登録したときに表示されるConsumerKey ConsumerSecretをセットする。 String consumerKey = "XXXXXXXXXXXXX"; String consumerSecret = "YYYYYYYYYYYYY"; //認証用URLが表示されるのでブラウザでアクセスし表示されるPINコードを読み込む。 //アカウントが複数ある場合あらかじめ関連づけたいアカウントでログオンしておくと良い TwitterFactory factory = new TwitterFactory(); Twitter twitter = factory.getOAuthAuthorizedInstance(consumerKey, consumerSecret); RequestToken requestToken = twitter.getOAuthRequestToken(); String authorizationURL = requestToken.getAuthorizationURL(); System.out.println(authorizationURL + " にウェブブラウザでアクセスして認証を許可してください。"); System.out.println("認証を許可したらウェブブラウザにPINコードが表示されます。"); System.out.println("PINコードを入力して[Enter]キーを押してください。"); BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); String pin = r.readLine(); AccessToken accessToken; if (pin.length() > 0) { accessToken = twitter.getOAuthAccessToken(requestToken, pin); } else { accessToken = twitter.getOAuthAccessToken(); } //AccessToken AccessTokenSecretを表示。アプリケーションでこれを使う。 int userId = twitter.verifyCredentials().getId(); String token = accessToken.getToken(); String tokenSecret = accessToken.getTokenSecret(); System.out.println("UserId=" + userId); System.out.println("Token=" + token); System.out.println("TokenSecret=" + tokenSecret); } }
あらかじめoauthライブラリはインストールしておく。
sudo gems install oauth
使い方はJava版と同じ。
require 'rubygems' require 'oauth' CONSUMER_KEY = 'XXXXXXXXX' CONSUMER_SECRET = 'YYYYYYY' consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site=>'http://tw\ itter.com') request_token = consumer.get_request_token print "次のURLにアクセスしてください: #{request_token.authorize_url}\n" print "PINコードを入力して[ENTER]を押してださい\n" pin = STDIN.gets.chomp print "PIN CODE=#{pin}\n" access_token = request_token.get_access_token(:oauth_token => request_token.tok\ en, :oauth_verifier => pin) print "Token=#{access_token.token}\n" print "Secret=#{access_token.secret}\n"
意味不明な以下のメッセージが表示された場合、認証用のURLのコピペ間違いなどが考えられる(MacのターミナルからURLをコピーしようとしたとい、折り返し部分にバックスラッシュが含まれていてこのメッセージが表示されたことがあった)。
おっと!このページはもう有効ではありません。あなたと同じトークン情報を誰かがすでに利用してしまったようです。元のサイトに戻ってもう一度試してみてください。たぶん単純なミスでしょう。
#!/usr/bin/env ruby # coding: utf-8 require 'net/http' require 'uri' require 'rubygems' require 'json' USERNAME = '_USERNAME_' # ここを書き換える PASSWORD = '_PASSWORD_' # ここを書き換える # URLが変更になってるみたい(2010/07/22) #uri = URI.parse('http://stream.twitter.com/spritzer.json') uri = URI.parse('http://stream.twitter.com/1/statuses/sample.json') Net::HTTP.start(uri.host, uri.port) do |http| request = Net::HTTP::Get.new(uri.request_uri) # Streaming APIはBasic認証のみ request.basic_auth(USERNAME, PASSWORD) http.request(request) do |response| raise 'Response is not chuncked' unless response.chunked? response.read_body do |chunk| # 空行は無視する = JSON形式でのパースに失敗したら次へ status = JSON.parse(chunk) rescue next # 削除通知など、'text'パラメータを含まないものは無視して次へ next unless status['text'] user = status['user'] puts "#{user['screen_name']}: #{status['text']}" end end end
#!/usr/bin/python # -*- coding: utf-8 -*- import sys import tweepy import simplejson #from pit import Pit class StreamListener(tweepy.StreamListener): def on_data(self, data): data = simplejson.loads(data) if data.has_key('text'): print data['text'] def main(): user = 'xxxxx' passwd = 'yyyyy' stream = tweepy.Stream(user, passwd, StreamListener()) stream.filter(track=('#nhk',)) if __name__ == "__main__": main()
streaming.pyで処理が行われている。
def filter(self, follow=None, track=None, async=False): params = {} self.headers['Content-type'] = "application/x-www-form-urlencoded" if self.running: raise TweepError('Stream object already connected!') self.url = '/%i/statuses/filter.json?delimited=length' % STREAM_VERSION if follow: params['follow'] = ','.join(map(str, follow)) if track: params['track'] = ','.join(map(str, track)) self.body = urllib.urlencode(params) self._start(async)