試される大地から

furaiboが送る技術ブログ。プログラミングのTipsなど書いていきます。

Twitterハッシュタグを利用した画像URLの抽出


久しぶりに技術的なことを書こうと思います。今回はRubyを利用して、Twitterからハッシュタグと関連するツイート内の画像URLを引っ張ってくるスクリプトを書いてみました。



今回はTwitter Gemを利用します。Twitter Gemを利用することによって、JSONのパースを行うことなく、Twitterの情報を取得することができるようになります。



TwitterGemのインストールにあたっては、あらかじめRubyとRubyGemがインストールされている必要があります。


# root権限か、sudoをつけて実行

gem install twitter


これでTwitter Gemがインストールされます。しかし、これだけではTwitterから情報を取ってくることはできません。Twitterアカウントを持っていることと、Twitter Developersでアクセストークンなどの設定を行う必要があるのです。


Twitterアカウントを持っていない人はまず、Twitterアカウントを取得します。そして、それが終わったら、以下のTwitter開発者用のサイトに飛びます。


Twitter Developers






f:id:incodethx3932:20140306224403p:plain

Twitter開発者サイトのトップページです。
左上の「Sign in」をクリックして、ログインページに入ります。



f:id:incodethx3932:20140306224404p:plain

Twitterで登録しているユーザ名とパスワードを入力します。



f:id:incodethx3932:20140306224414p:plain

ログインが完了しますので、左上にTwitterで登録しているユーザ画像が出ますので、
そこにマウスポインタを合わせると、ドロップダウンメニューが出現します。
そこで「My Applications」をクリックします。



f:id:incodethx3932:20140306224415p:plain

「Create New App」ボタンをクリックします。



f:id:incodethx3932:20140306225753p:plain

登録画面に移りますので、アプリケーションの情報を登録します。
名前が重複したり、Descriptionが10文字以下だったり、URLが空だと登録出来ません。
そして、下の規約に対して同意する場合、チェックボックスにチェックを入れます。



f:id:incodethx3932:20140306224427p:plain

成功すると、上のような画面が出ますので、ページ上部の「API Keys」タブをクリックします。



f:id:incodethx3932:20140306224425p:plain

さらにページ下部へとスクロールすると「Create Access Key」ボタンがありますので、
これをクリックします。



f:id:incodethx3932:20140306224433p:plain

自動的にAccess Keyが作成され、情報が反映されます。これが完了するまでに十数秒ほど待ちます。
そして、「Test OAuth」ボタンを押します。



f:id:incodethx3932:20140306224434p:plain

画面にConsumer Key, Consumer Secret, Access Token, Access Token Secretの4つが表示されます。





これで、Twitter APIを利用した画像・ツイートの抽出が可能になります。
以下に画像URLを抽出するRubyスクリプトを示します。
スクリプト中のAccess Tokenなどの情報は、適宜入れ替えて下さい。


「#まどか」のハッシュタグがついているツイートを抜き出し、さらに画像がある場合にはそのURLを取得します。


# -*- coding: utf-8 -*-
require "twitter"


# 変数
limit   = 1000     # 取得するツイートの上限数
keyword = "まどか"   # ハッシュタグによる検索を行う際のキーワード


# Twitter APIによるリクエスト
client = Twitter::REST::Client.new do |config|
    config.consumer_key        = "[あなたのConsumer Key]"
    config.consumer_secret     = "[あなたのConsumer Secret]"
    config.access_token        = "[あなたのAccess Token]"
    config.access_token_secret = "[あなたのAccess Toekn Secret]"
end


# キーワードを含むハッシュタグの検索
begin
    # limitで指定された数だけツイートを取得
    client.search("#{keyword} -rt", :locale => "ja", :result_type => "recent", :include_entity => true).take(limit).map do |tweet|
        # entities内にメディア(画像等)を含む場合の処理
        if tweet.media? then
            tweet.media.each do |value|
                puts value.media_uri
            end
        end
    end

# 検索ワードでツイートを取得できなかった場合の例外処理
rescue Twitter::Error::ClientError
    puts "ツイートを取得できませんでした"

# リクエストが多すぎる場合の例外処理
rescue Twitter::Error::TooManyRequests => error
    sleep error.rate_limit.reset_in
    retry
end


スクリプト自体は簡単なように思えますが、Github上で実際にTwitter Gemのソースコードを読む必要がありました。
一応、ドキュメントはあるのですが、サンプルが少なく、不親切な印象がありました。
Twitter Gemに習熟するにはソースコードを読むことが必須と言えます。




参考にしたページは以下の通りです。

TwitterのAPIを使用するために必要なキーを取得する手順 - Hello API

twitter search apiを使って画像アリのツイートを拾ってみた - とりあえずphpとか

3分でスッキリ! Oauth 1.0図解とRuby Twitter bot開発 | KumanBlog

File: README — Documentation for twitter (5.7.1)

sferik/twitter · GitHub