» Rubyのブログ記事

この本読んでみて思ったのですが、「恋するプログラム―Rubyでつくる人工無脳」をツイッターボット用にPHPを使用して

書き直した、そんな感じの本です。「恋するプログラム」にはRubyの文法やオブジェクト指向についての解説がわかり易く書かれています。

「Twitterボットプログラミングテクニック」のほうはPHPの文法等について詳しい説明はありませんがボットが応答(返事)をするための

クラスや辞書クラスの作り方、形態素解析、マルコフ連鎖等ボット作成のためのアイデアは十分に書かれています。プレミア価格の「恋するプログラム」を購入するよりかは安く入手できるのでお勧めです。

 

恋するプログラム—Rubyでつくる人工無脳

一度は読んでみたいものの、アマゾンマーケットプレイスのプレミア価格には手が出せず

モンモンとしている方は、「恋するプログラム 人工知能 講義録」で検索してみよう。

チャプター8までありました。9は見つからず。

投票数100くらいで復刊交渉が始まるらしいので是非、復刊ドットコムで

復刊実現の投票をお願いします。

home_timelineを使って20個以上のツイートを取得する。

home_timelineでは800個のツイートを取得できるようです。
まずはhome_timelineにcountという引数を指定して200個
のツイートを取得、その後にmax_idを使用して800個取得してみます。

#!/usr/bin/env ruby -Ku

require ‘rubygems’ # ←Ruby 1.9では不要
require ‘twitter’
require ‘pp’

# ログイン

Twitter.configure do |config|
config.consumer_key = ”
config.consumer_secret = ”
config.oauth_token = ”
config.oauth_token_secret = ”
end
#自分のタイムラインを取得

timeline =Twitter.home_timeline(:count => 200)

timeline.each{ |status|
str = “(#{status[:id]}) #{status[:user][:name]} (#{status[:created_at]})”
puts str
}

home_timelineメソッドの引数に「:count => 200」と指定するだけで
約200個のツイートが取得できます。

timeline.each{}の部分は配列からデータを取り出すための方法です。Rubyの入門書で
配列やイテレータで調べると具体的な使い方が載っています。

次に引数countとmax_idを使って約800個のツイートを取得します。
max_idにはツイートに付与されているidの数字を使います。指定された
idよりも古い(数字の小さい)ツイートが取得できるようになります。
#タイムラインを取得

maxid = 0
timeline =Twitter.home_timeline(:count => 200)
timeline.each{ |status|
str = “(#{status[:id]}) #{status[:user][:name]} (#{status[:created_at]})”
puts str
maxid = status[:id] – 1
}

puts “********************************************”

3.times{
timeline =Twitter.home_timeline(:count => 200,:max_id => maxid)
timeline.each{ |status|
str = “(#{status[:id]}) #{status[:user][:name]} (#{status[:created_at]})”
puts str
maxid = status[:id] – 1
}
}

まずmaxid = 0で変数宣言してます。
引数max_idは指定されたidを含むより小さいidのツイートを取得するので、
timeline.each{}の中のmaxid = status[:id] – 1で
取得した約200個のツイートの最後のツイートidから−1を引いた数字を
maxidに指定してます。

より正確にツイートを取得するにはsince_idを併用するみたいです。

参考
https://dev.twitter.com/docs/api/1.1/get/statuses/home_timeline
https://dev.twitter.com/docs/working-with-timelines

#!/usr/bin/env ruby -Ku

require ‘rubygems’ # ←Ruby 1.9では不要
require ‘twitter’
require ‘pp’

# ログイン

Twitter.configure do |config|
config.consumer_key = ‘******************’
config.consumer_secret = ‘***************************’
config.oauth_token = ‘*********************************’
config.oauth_token_secret = ‘*************************’
end
t =Twitter.get(‘/1.1/application/rate_limit_status.json’)

pp t[:body][:resources][:statuses][:”/statuses/home_timeline”][:remaining]
pp t[:body][:resources][:statuses][:”/statuses/home_timeline”][:reset]
pp t[:body][:resources][:statuses][:”/statuses/home_timeline”][:limit]

pp Time.at(t[:body][:resources][:statuses][:”/statuses/home_timeline”][:reset])

#end

TwitterAPI1.1になって15分で15回しか実行できないAPIがるので、試行錯誤しながらBotを作っていると直ぐに上限回数に達して

しまいます。残りの実行可能回数を確認するためのコードです。

「t =Twitter.get(‘/1.1/application/rate_limit_status.json’)」の部分で各APIの制限回数、残り回数、リセット時刻が取得できます。

これもハッシュの型で取得できるので、知りたい値のキーを指定すれば簡単に取得できます。

リセット時刻の値は数字で取得されるので、「Time.at()」を使って時刻の形式に変換しています。

[:body][:resources][:statuses]にはhome_timelineの制限回数の他にmentions_timelineやuser_timelineなどがあります。

[:”/statuses/mentions_timeline”]
[:”/statuses/user_timeline”]

twitSandbox1.1を使うと各APIで取得できるデータが簡単に見ることが可能です。

「’/1.1/application/rate_limit_status.json’」などのエンドポイント(URL)も載っているので参考になります。

ボット作りの最初はまずタイムラインの取得から始めてみます。

ファイル名「homeTimeLine.rb」などの名前でファイルを作成。

以下ファイルの中身。

#!/usr/bin/env ruby -Ku

require ‘rubygems’ # ←Ruby 1.9では不要
require ‘twitter’
require ‘pp’

# ログイン
Twitter.configure do |config|
config.consumer_key = ‘*********************’
config.consumer_secret = ‘*******************’
config.oauth_token = ‘*******************’
config.oauth_token_secret = ‘****************’
end
#タイムラインの取得

#自分のタイムラインを取得
timeline =Twitter.home_timeline

pp timeline

#end

ログインの部分の「******」は取得したキーに置き換えます。

Twitter.home_timelineで取得出来るツイート数は20個です。

timelineに配列の型で格納されます。(pp timelineをpp timeline.classとするとtimelineの型が表示されます)

pp timelineで20個のツイートと付随する大量の情報が表示されます。

timelineは配列なのでtimeline[0]で一番新しいツイートのみを表示できます。(0〜19)

pp timeline[0]

timeline[0]で取得できるデータはキーと値からなるハッシュでできています。

このデータの中から必要になりそうな物を表示してみます。

h = timeline[0]

pp h[:created_at]#投稿日時
pp h[:id]#ツイート文のID
pp h[:text]#ツイート文
pp h[:source]#ツイッター投稿時のクライアント名(アプリ名)
pp h[:user][:id]#ユーザーID
pp h[:user][:name]#変更可能な名前
pp h[:user][:screen_name]#@の後に書かれている名前(ツイッターID)
pp h[:user][:location]#プロフィール欄の地名
pp h[:user][:description]#プロフィール欄の説明文
pp h[:user][:followers_count]#フォロワーの数
pp h[:user][:friends_count]#フォローしてる数
pp h[:user][:statuses_count]#ツイート数
pp h[:retweet_count]#リツイート数

まずh = timeline[0]で変数hにデータを格納。

h[:キー]の形で指定するとそのキーに対応する値が取得できます。

またh[:user][:name]のようにキーの中にキーが設定されている物もあります。(ネスト(入れ子))

最後に

pp h.class
pp h[:user].class

を実行すると

Twitter::Tweet
Twitter::User

と表示されます。これはTwitter Ruby Gemのクラスです。「Tweet」「User」クラスで使用できるメソッドを使うと先ほどのハッシュで指定したデータの一部がメソッドを使って取得できます。

http://rdoc.info/gems/twitter/frames(Twitter Ruby Gemのドキュメント)

pp h.user
pp h.user.name

 

※参考ブログ

プログラミング未経験者でもできる、 Ruby を使った Twitter の bot の作り方(第二章)

2018年11月
« 4月    
 123
45678910
11121314151617
18192021222324
252627282930  

カテゴリー

広告

現在の住まい、将来はVPSへ引越します。 ロリポップの上位版です。

広告

広告

最近のコメント

    広告

    Railsを動かす予定のVPS。無料キャンペーン中。

    広告