2017-06

Latest Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

もばいるじゃいく

携帯からTwitterにメール投稿するついったーもばいるをJaikuに移植した。

参考資料はtsupoさんの日本語訳(とオフィシャル「Twitter! Twitter APIガイドブック」)。
いろいろつまづいたね。
JSONが動かなくてXML-RPCの方を使ったり。Ruby1.8.5のバグなのかContent-Typeをヘッダに入れないと「XML-RPC server accepts POST requests only.」とか言われたり(これか?)。取得したRSSもそのままREXMLに食べさせるとiconvが文句言うのでnkf -Wwとか訳の分からんことしたり。
今後APIの仕様が変更になったりもするのかな。

まぁこれで一応の挙動は分かったけど、何かやろうかなぁ。
Inviteもできるようになっているので、Botを作ることもできるけど、Twitterと同じことやってても面白くない。
同じことをやるにしても、電車運行情報なら、train_kantoというChannelを作るといいかも。Botが投稿するだけでなく、ユーザーからの投稿も可能になって、情報が充実する。
とりあえずもう少し使いながら雰囲気を見極めてみるかな。


require 'nkf'
require 'net/http'
require 'cgi'
require "rexml/document"
require 'net/smtp'
Net::HTTP.version_1_2

id="xxxx"
api_key="xxxxxxxx"
from="(xxxx@xxxxxxxx\.ne\.jp|xxxx@xxxxxxxx\.co\.jp)"

mailserver="xxxx.xxxxxxxx.ne.jp"
maildomain="xxxx.xxxxxxxx.ne.jp"
mailid="jaikupost@xxxx.xxxxxxxx.ne.jp"
mailpass="xxxxxxxx"
mail="jaikupost@xxxx.xxxxxxxx.ne.jp"

status="Moving"
subject=""
address=""
response=""
mailbody=""

while line=gets
if line =~ /^Subject: (.*)$/
subject=$1
status=NKF.nkf('-mw',$1)
elsif line =~ /^From: (.*)$/
address=$1
end
end

if Regexp::new(from) =~ address

header = {'Content-Type' => 'text/xml; charset=utf-8'}
path="/xmlrpc" #?status="+status
data=<<EOT
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>presence.send</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>user</name>
<value><string>#{id}</string></value>
</member>
<member>
<name>personal_key</name>
<value><string>#{api_key}</string></value>
</member>
<member>
<name>generated</name>
<value><boolean>0</boolean></value>
</member>
<member>
<name>message</name>
<value><string>#{status}</string></value>
</member>
<member>
<name>icon</name>
<value><int>325</int></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
EOT
Net::HTTP.start(host="api.jaiku.com",80) {|http|
response=http.post( path, data ,header)
}

path = "/contacts/feed/atom?user="+id+"&personal_key="+api_key
Net::HTTP.start(host=id+".jaiku.com",80) {|http|
response=http.get( path )
}

statuses = REXML::Document.new(NKF.nkf('-Ww',response.body).gsub(/<img[^>]*\/>/,'')).elements.to_a("feed/entry")
statuses.each{|status|
text=status.elements.to_a("content/div/p").first.text.strip
/http:\/\/([^\.]+)\.jaiku\.com/=~status.elements.to_a("author/uri").first.text
author=$1
mailbody << NKF.nkf('-Wj', author.to_s+": "+text.to_s+"\n") if author!=id
}

#Net::SMTP.start( 'smtp01.itscom.net', 25, 'itscom.net') {|smtp|
Net::SMTP.start( mailserver, 25, maildomain, mailid, mailpass, :login ) {|smtp|
smtp.send_mail <<EndOfMail, mail, address
From: #{mail}
To: #{address}
Content-Transfer-Encoding: 7bit
Content-Type: Text/Plain; charset=iso-2022-jp
Subject: Re:#{subject}

#{mailbody.gsub("&gt;",">").gsub("&lt;","<").gsub("&amp;","&")}
EndOfMail
}

end

スポンサーサイト

トラックバック

http://worris.blog61.fc2.com/tb.php/82-4b03b444

この記事にトラックバックする(FC2ブログユーザー)

«  | HOME |  »

移転しました。

ブログ引っ越しました。
無用の科学あるいは錬金術

 

株価情報

 

最近の記事

最近のコメント

 

最近のトラックバック

月別アーカイブ

カテゴリー

RSSフィード

ブログ内検索

 

なかのひと

 

ヘビーローテーション

 

 

リンク

広告

 

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。