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