Rubyによるアメブロのペタ貼り自動化スクリプト(7) ペタ貼り対象の自動抽出
次に、以下の不満点を解消する。
- 一日に貼れるペタ数は500。500貼ろうとすると対象となるどうやって選び出すかが問題。"peta_target.txt"で設定されているものだけでは、到底数が足りない。
- ペタを貼って貰った相手にお返しをしないといけないのだが、今の仕組みだと、"peta_target.txt"に一々登録しないといけない。
まず、ペタを貼って貰った相手の抽出をする。
ペタを貼って貰った状況は、ペタを貼りに行くアドレスにアクセスすれば確認できる。通常、そのURLは、
http://peta.ameba.jp/p/addPeta.do?petaId=&targetAmebaId=*****&pageNo=n
*****の部分に自分のID、nの部分にペタ貼りのページNoがはいる。
ペタ貼りのページに示されるペタの数は15件、全部で500件のペタ情報を集める事を目安として、1〜33ページまでアクセスして、貼られたペタの情報を集める。
ペタを貼ってくれた相手の情報は、下記の正規表現を
ameba_url = Regexp.new("http:\/\/ameblo.jp\/([A-Za-z0-9]*)\/")
使って相手のブログのurlを抽出し、()で囲われた部分でバックリファレンスの機能を使って、更にそのurlから相手のブログIDを抽出する。抽出した相手IDは、"peta_target.txt"から読み出したペタを貼りたいIDの配列に追加する。
実際のコードは
for i in 1..33 res = Net::HTTP.get('peta.ameba.jp','/p/addPeta.do?petaId=&targetAmebaId=romrus&pageNo='+i.to_s) res.to_s.scan(ameba_url) do |a| list.push(a[0]) #p a end end
実際にIDを検出させると、ペタを貼ってくれたブログのIDとは別に
- 自分のID
- 人気ブログへのリンク
- プレミアムブログへのリンク
が検出される。更に
- 元々のlistに含まれている"peta_target.txt"の中にあったID
も重複して検出されるので、listに対して、以下の処理を行って、配列list1を得る。
list.delete("*****")#自分のブログを外す list.delete("famousblog")#人気ブログへのリンクを外す list.delete("content")#プレミアムブログへのリンクを外す list1 = list.uniq
最後の行を
list.uniq!
としなかったのは、抽出したIDのリストに重複が無かった場合に、listがnilになる為。
まさかそんな偶然があるとは思わないけれど…