開発したアプリなど一覧

ruby で自動でセルクマするスクリプト書いた

はてなブックマークに自分のサイトをブックマークする事をセルクマというらしい。なんか賛否両論あるようだが hatena の jkondo 氏が1件までならOKと言うので気が向いた時にやるようにしている。

ただすぐ忘れるしそもそも普段はてな使わないし手動ではだるいので 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 のトークンとかは適当に取得しておきましょう。

今回は認証するのに以下のスクリプトを利用しました。

Hatena OAuth Sample in Ruby

URL は後ろになんかごちゃごちゃとついてるから削除、タグはブログにつけたタグをはてブのタグとして利用しています。

勢いで書いたは良いが延々と自分の1ブクマだけ並んでるの見たら悲しくなったので動かすの止めようかな。。。

Sponsored Link

コメント

タイトルとURLをコピーしました