2017-10

Latest Entries

スポンサーサイト

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

ウェブでの活動を一日分まとめて投稿するMakeYourDay

「Twitterのログは日別に取り出せない」という不満から発した先日のエントリだが、同じことをしている人は幾人かいるようで、中でもこちらではサービス化が検討されているが実現していない。
もう一つ連想したのが、時々目にする「links for YYYY-MM-DD」というブログエントリ。ちょっと調べてみるとdel.icio.usに自動投稿の機能があってMovableTypeやWordPressであれば使えるようだ。しかし一般人にはちょっと敷居が高いよね。
そこでサービス化してみた。

MakeYourDay

サンプルの日記

いろんなウェブサービスでの一日分の活動ログをまとめてはてなダイアリーに投稿する。
現在の対応サービスは、Twitter、はてなブックマーク、はてなフォトライフ、ブクログ。
ぼそっとTwitterでつぶやいてみたら早速利用されてしまい、dankogaiまで登録してる。

・TwitterはやはりAPIの20件制限で引っかかる人がいるようだ。@でチャットしてたら当然だろうな。スクレイピングで対応もできるけど気が進まないやってみました(追記)。僕自身は20件超えることはまずないし、自分専用には一日複数回取得しているし
・はてなブックマークはatomfeedを使ってパラメータで日付指定すると一度で全件取れるみたい。だから0時が区切りになる。
・はてブはもともと日付指定でアクセスできるからあんまり必要ないのかもしれないけど。一本化することに意味があるのかどうか。リンクと一言コメントみたいなエントリもよく見かけるけどあれは手作業なんだよね?
・ブクログはスクレイピングするしかない。雑なのでちょっと不安。それにしても、以前Twitterで話が出ていたと思うがLast.fmの書籍版が欲しい。
・はてなダイアリーへの投稿形式で、ブクマコメントとブクログのレビューを箇条書きネストで記述しているが、あんまり気に入らない。うまくインデントしてくれる記法が見当たらない。

はてな認証APIがあっさり使えたので満足。
あとは対象サービスを拡大したり、はてダ以外への投稿も可能にしたりという可能性もあるかな。「今日の検索語」なんてやりたいけど、ややこしそうだし酷いことになりそう。

(11/26追記)
Twitterをスクレイプ版に変更しました。20件を超えて取得できます。

(4/6追記)
はてなグループの日記にも投稿できるようにしました。

もばいるじゃいく

携帯から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

SETAKEの胸囲版

することもなくTwitterを眺めていたら@kotorikoがこんなことこんなことを言っていた。元ネタはこれなんだけど。
で、@hiramekiに投げて自分で消化。その間2時間弱。

http://worris3.sakura.ne.jp/kyoui/

めっちゃてきとう。
「名前 バスト センチ」で検索してsummaryから/\d+センチ/を抜いただけ。時間かからないように100件のみ。
例として出した分に関しては公表値や推定値がちゃんと取れている。
サイトデザインはSETAKEからほぼ丸パクリ。

いまここブログパーツ

ついったー部にも書いたけど、右上にブログパーツを設置。
これはひどいプライバシー公開だ。
ちなみに基本的に携帯の基地局情報なので、該当エリアは広いよ。

404 Not Foundのキャッシュを探す 404.undo.jp

ウェブ上で目的のページが消滅していて「404 Not Found」になっていることがある。最近遭遇したのは、ほら、あれ、何だっけ。まぁいいや。
そういう場合、ぐぐった結果だったらGoogleのキャッシュを見るし、どうしてもそのページが読みたい時はInternet ArchiveのWayback Machineを使う。
しかしWayback Machineを使うのは若干操作が面倒だったりするし、時間がかかって結局キャッシュがなかったりする。あと最近ではウェブ魚拓なんてのもあるけど、それぞれをいちいち探すのは面倒くさい。
そこで作った。
ええと例えば、あの、ほれ、何だろう。ちょっと前に見たいページがあったのだが。思い出せないので、適当なページを。

キルゴア・トラウトの作品リスト:
http://404.undo.jp/http://members.tripod.com/~sanaes6/klgore.html

こんな感じで、目的のページの頭に「http://404.undo.jp/」を付けます。
GoogleキャッシュとWayback Machineとウェブ魚拓をまとめて検索します。Yahoo!やMSNサーチは、一発でキャッシュに辿り着かないのでとりあえず省略。しかしWayback Machineの文字化けはどうにかならんもんかな。
ブックマークレットにするほどの使用頻度ではないと思う。「404.undo.jp」という文字列を記憶できればよいのではないかな。もっと憶えやすいドメイン取ればいいのかもしれんけど。

«  | HOME |  »

移転しました。

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

 

株価情報

 

最近の記事

最近のコメント

 

最近のトラックバック

月別アーカイブ

カテゴリー

RSSフィード

ブログ内検索

 

なかのひと

 

ヘビーローテーション

 

 

リンク

広告

 

 

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