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になる為。
まさかそんな偶然があるとは思わないけれど…