Microsoft TranslatorのAPIを使ってみる
最近は年度末というもともあって仕事が落ち着いており、割と毎日を平和に(暇に)暮らしています。こんなんじゃあかん!何かしよう!と思って色々情報を集めていて、Microsoft Translatorというサービスがあることを知りました。言語翻訳を使ったプログラムは書いたことが無かったので、早速チャレンジ!
このサービスはBingデベロッパーセンターで「アプリケーションID」を取得する必要があります。[MSDN:Code Samples Gallery]:Microsoft Translator を使用して英語から日本語へ機械翻訳するというページに、VBでのサンプルコードと共にBingデベロッパーセンターでアプリケーションIDを取得する方法が記載されていましたので参考にしました。会社名とかアプリケーション名とか入れないといけないのでちょっと面倒くさいです。僕は適当に入れておきました。
APIの使い方のドキュメントはMicrosoft Translator:HTTP APIに記載されています。
さて、それではこのAPIのTranslate Methodを使って、AllHipHop.comとHipHopDXのRSSを取得してMicrosoft Translatorで記事件名を日本語訳してTwitterに投稿するbotを作ってみました。
・@asebad
ソースはこんな感じ。
そんなわけで2ヶ月ぶりくらいにRubyでプログラム書きました。しばらく暇だしもうちょっと何か作ってみよう。
このサービスはBingデベロッパーセンターで「アプリケーションID」を取得する必要があります。[MSDN:Code Samples Gallery]:Microsoft Translator を使用して英語から日本語へ機械翻訳するというページに、VBでのサンプルコードと共にBingデベロッパーセンターでアプリケーションIDを取得する方法が記載されていましたので参考にしました。会社名とかアプリケーション名とか入れないといけないのでちょっと面倒くさいです。僕は適当に入れておきました。
APIの使い方のドキュメントはMicrosoft Translator:HTTP APIに記載されています。
さて、それではこのAPIのTranslate Methodを使って、AllHipHop.comとHipHopDXのRSSを取得してMicrosoft Translatorで記事件名を日本語訳してTwitterに投稿するbotを作ってみました。
・@asebad
ソースはこんな感じ。
#! /usr/bin/ruby -Ku require "rubygems" require 'oauth' require 'rubytter' require 'net/http' require 'open-uri' require 'rexml/document' require 'rss/2.0' require 'cgi' # 定義 CONSUMER_KEY = 'AAA' CONSUMER_SECRET = 'BBB' ACCESS_TOKEN = 'CCC' ACCESS_SECRET ='DDD' APPID = 'EEE' APIURI = 'http://api.microsofttranslator.com/V2/Http.svc/Translate' PDATA = Array.new # TinyURL化メソッド def tinyurl(link) url = "http://tinyurl.com/api-create.php?url=" + link open(url) do |http| res = http.read return res end end # RSSから記事を取得して翻訳、配列に入れる def getRss(site,rssuri,tmpfile) slink = nil open(tmpfile,'r') do |lfile| lfile.each do |link| slink = link.chop end end open(rssuri) do |http| flg = 0 rssres = http.read result = RSS::Parser.parse(rssres, false) result.items.each do |item| link = item.link if link == slink then break end if flg == 0 and link != slink then open(tmpfile,'w') do |lfile| lfile.puts link end flg = 1 end title = item.title etxt = CGI.escape(title) open(APIURI + "?appId=#{APPID}&text=#{etxt}&from=en&to=ja") do |http| xml = http.read doc=REXML::Document.new xml jptitle = doc.elements['/string'].text tulink = tinyurl(link) mess = jptitle + " " + tulink PDATA.push mess end end end end # Twitterに投稿するところ begin getRss('[AllHipHop]','http://allhiphop.com/stories/news/rss.aspx','ahh.txt') getRss('[HipHopDX]','http://feeds.feedburner.com/hiphopdx/news','hhdx.txt') PDATA.each do |data| # Twitter Post consumer = OAuth::Consumer.new( CONSUMER_KEY, CONSUMER_SECRET, :site => 'http://twitter.com' ) token = OAuth::AccessToken.new( consumer, ACCESS_TOKEN, ACCESS_SECRET ) client = OAuthRubytter.new(token) client.update(data) sleep 60 end rescue print "RuntimeError: ", $!, "\n"; endざっとアウトプットを見た結果、機械翻訳としては結構精度高いように思います。Microsoft Translator、なかなか良いじゃない。そして曲名がちょっと笑ってしまう。「The Weed Iz Mine」→「雑草 Iz 鉱山」 て。
そんなわけで2ヶ月ぶりくらいにRubyでプログラム書きました。しばらく暇だしもうちょっと何か作ってみよう。
Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)
posted with AZlink at 2011.3.24
島田 浩二,設樂 洋爾,村田 賢太,前田 智樹,谷口 文威
翔泳社
売り上げランキング: 25485
翔泳社
売り上げランキング: 25485