はてなブックマークに自分のサイトをブックマークする事をセルクマというらしい。なんか賛否両論あるようだが hatena の jkondo 氏が1件までならOKと言うので気が向いた時にやるようにしている。
1件は禁止じゃないです / “セルクマしたら怒られた話” http://t.co/YEn5uZLGb0
— 近藤淳也 (@jkondo) June 17, 2013
ただすぐ忘れるしそもそも普段はてな使わないし手動ではだるいので ruby の練習ついでに自動でセルクマするスクリプトを書いた。ifttt とか使えばスクリプト書く必要は無いとは思うんだけど、そこは勉強ということで。
# 改行が一部消えてるのはなんだろ。。
require 'rubygems'
require 'oauth'
require 'rss'
config = {
:feed_url => 'http://loumo.jp/feed/',
:log_file => "#{Dir.home}/.hatena_self_bookmark.log",
:client_key => 'your client key',
:client_secret => 'your client secret',
}
consumers = {
:oauth => OAuth::Consumer.new(
config[:client_key],
config[:client_secret],
{
:site => 'https://www.hatena.com',
:request_token_path => '/oauth/initiate',
:authorize_path => '/oauth/authorize',
:access_token_path => '/oauth/token'
}
),
:bookmark => OAuth::Consumer.new(
config[:client_key],
config[:client_secret],
{:site => 'http://b.hatena.ne.jp'}
)
}
consumer =
access_token = {
:token => 'your access token',
:secret => 'your secret'
}
access_token = OAuth::AccessToken.new(consumers[:bookmark], access_token[:token], access_token[:secret])
header = { 'Accept'=>'application/xml', 'Content-Type' => 'application/xml' }
rss = RSS::Parser.parse(config[:feed_url])
log = open(config[:log_file], 'a+')
logtext = log.read;
rss.items.reverse.each{|item|
title = item.title
link = item.link.split('?')[0]
if logtext.include?(link) then
next
end
tags = []
item.categories.shift
item.categories.each{|tag|
tags << tag.content
}
tag = tags.length > 0 ? '[%s]'%tags.join('][') : ''
ret = '<entry xmlns="http://purl.org/atom/ns#">
<title>%s</title>
<link rel="related" type="text/html" href="%s" />
<summary type="text/plain">%s</summary>
</entry>'%[title, link, tag]
res, data = access_token.post('/atom/post', ret, header)
log.write link + "\n"
}
自分のブログの RSS を読み込んではてブに OAuth で投げるだけです。これを cron で適当な間隔で実行します。OAuth のトークンとかは適当に取得しておきましょう。
今回は認証するのに以下のスクリプトを利用しました。
URL は後ろになんかごちゃごちゃとついてるから削除、タグはブログにつけたタグをはてブのタグとして利用しています。
勢いで書いたは良いが延々と自分の1ブクマだけ並んでるの見たら悲しくなったので動かすの止めようかな。。。
コメント