2009/10/24

第13回北海道開発オフ成果:Google TrendのHottrendをTumblr投稿する

以前、Google TrendのHottrendを@dabesaにポストさせるScriptを書きました。

[-*煙猴*-]: 第7回北海道開発オフ成果:Google TrendのHottrendをTwitter投稿する

今回は、Yahoo!デベロッパーネットワークの画像検索APIを使って、そのHottrendの一番最初の検索結果の画像をだべさTumblrにポストさせてみました。

わざわざadult_ok=1にしているので、エロい画像も混ざってしまう可能性はありますが、そのほうが面白いかと思って。べ、べつに下心なんて無いんだからねっ。

以下ソース。



#! /usr/bin/ruby -Ku

require 'open-uri'
require 'rexml/document'

require 'net/http'
require 'rubygems'
gem 'twitter4r'
require 'twitter'
require 'pit'

# Twitter4Rバグ回避
require 'cgi'
class Hash
  def to_http_str
    self.map{|key,value| "#{key}=#{CGI.escape(value.to_s)}"}.join("&")
  end
end

# TinyURL化メソッド
def tinyurl(link)
  url = "http://tinyurl.com/api-create.php?url=" + link
  open(url) do |http|
    res = http.read
    return res
  end
end

begin

#################### HOTをとってくるところ
  uri="http://www.google.co.jp/trends/hottrends/atom/hourly"
  xml = open(uri).read
  eventlist=Array.new

  REXML::Document.new(xml).root.elements.each("entry") do |elm|
    eventlist << elm.elements['content'].text.to_s
  end

  i = eventlist[0].index("href=")
  i = i + 6
  j = eventlist[0].index("&sa=X")
  j = j + 4
  url = eventlist[0][i..j]
  turl = tinyurl(url)

  i = eventlist[0].index("&sa=X")
  i = i +  7
  j = eventlist[0].index("")
  j = j - 1
  keyword = eventlist[0][i..j]

#################### Twitterにポストするところ
  mess = "今日のキーワードは\"" + keyword + "\"だべさ。 => " + turl

  config = Pit.get("dabesa")
  cl = Twitter::Client.new(config)
  cl.status(:post,mess)

#################### Tumblrにポストするところ
  param = Hash.new
  param['appid'] = "アプリケーションID"
  param['query'] = keyword
  param['results'] = 1
  param['adult_ok'] = 1

  opt = param.map{|i| i.map{|j| CGI.escape j.to_s}.join('=') }.join('&')

  base = "http://search.yahooapis.jp/ImageSearchService/V1/imageSearch?"

  uri = base + opt
  xml = open(uri).read

  doc = REXML::Document.new(xml)
  doc.elements.each("/ResultSet/Result") do |elm|
    caption = elm.elements['Summary'].text
    source = elm.elements['Url'].text
    opt = "email=メールアドレス&password=パスワード&type=photo&source=" + source + "&caption" + caption
  end

  Net::HTTP.version_1_2
  Net::HTTP.start("www.tumblr.com", 80) do |http|
    responce = http.post("/api/write", opt)
  end

rescue
  print "RuntimeError: ", $!, "\n";
end