Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2009-11-17

[][][]はてなブックマークの最新ブックマークをtwitterでつぶやく

【注意】2010-08-16からパスワードによるログインではなく、OAuthによるログインへ仕様変更されました。従って、下記の情報は既に誤りになっております。


はてなブックマークの最新ブックマークをtwitterでつぶやきます。もちろん実行が必要ですが「Twitterのつぶやきからブックマーク」の逆ですね。はてなでブックマークしてから実行すると、そのブックマークをTwitterにポストします。同様なスクリプトもたくさんあると思いますが、俺フォーマットってことでお許しください。

ブックマークURLはbit.lyで短縮します。はてなのタグはハッシュタグにします。あんまりテストしてません^^

#! /Users/show/local/bin/ruby19
# coding: utf-8

require 'rubygems'
require 'twitter'
require 'open-uri'
require 'rss'
require 'json'


##設定
hatena_uri = "http://b.hatena.ne.jp/seuzo/rss"#はてなブックマークのRSSのURL
bit_ly_ID = "seuzo" #bit.lyのID
bit_ly_APIKEY = "R_a2986dcb585042fe226341ff1a222d3d" #bit.lyのAPI key
twitter_uname = "seuzo"#twitterのユーザー名
twitter_pass = "donnakanna"#twitterのパスワード



#api.bit.lyに問い合わせて短縮URLを得る
def shorten_url(long_url, my_id, my_apikey)
	hatena_json = open("http://api.bit.ly/shorten?version=2.0.1&longUrl=#{long_url}&login=#{my_id}&apiKey=#{my_apikey}"){|str| JSON.parse(str.read)}
	if hatena_json['statusCode'] == "ERROR" then
		p "Error! from api.bit.ly message:"
		p hatena_json['errorMessage']
		exit
	end
	hatena_json['results'].each_pair {|key, value|
		if key == long_url
			return value['shortUrl']
		end
	}
	raise "failed to shorten URL: #{long_url}"
end

#確認(標準出力にputして確認、nがタイプされたら死ぬ)
def my_confirm(str)
	puts str
	print "Do you Tweet this Bookmark? [y/n] : "
	ans = STDIN.getc
	exit if ans == 'n'
end


#RSSの取得と解析
hatena_rss = open(hatena_uri){ |file| RSS::Parser.parse(file.read) }#RSSの読み込みとパース
hatena_item = hatena_rss.items[0]#最新のブックマーク
hatena_tag = hatena_item.dc_subjects.map{|tmp_tag|"##{tmp_tag.content}"}.join(' ') + ' '#タグ
hatena_tag.gsub!(/([^A-Za-z0-9_]) /){"#{$1}_ "}#日本語ハッシュタグには「_」を追加
hatena_comment = hatena_item.description#コメント
hatena_title = hatena_item.title.gsub(/\s+/, " ")#最新ブックマークのエントリータイトル
my_confirm(hatena_comment + " http://bit.ly/foovar " + hatena_title)#このブックマークを投稿するかどうか確認する
hatena_link = hatena_item.link#ブックマーク先URL
hatena_link = shorten_url(hatena_link, bit_ly_ID, bit_ly_APIKEY)#bit.lyによるURL短縮
hatena_data =  "#{hatena_tag}#{hatena_comment} #{hatena_link} - #{hatena_title}" #投稿フォーマット
if hatena_data.length > 140 then #140文字を超えていたらエラーで終了(ruby1.9以上)
	puts "Error. The number of characters are over 140."
	puts hatena_data
	exit
end


#Twitterへの投稿
httpauth = Twitter::HTTPAuth.new(twitter_uname, twitter_pass)
client = Twitter::Base.new(httpauth)
client.update(hatena_data)

puts "successful tweet."
puts hatena_data

(追記:2009-12-16T15:48:20+0900)はてなブックマークのRSSは更新が遅いため、つぶやきをポストするかどうか確認できるようにした。

(追記:2010-01-02T14:47:53+0900)api.bit.lyがエラーを返した時にエラーメッセージを出して止まるようにした。

(追記:2010-05-28T12:14:06+0900)api.bit.lyを呼び出す前に該当ブックマークでいいのかどうかを確認できるようにした。

(追記:2010-06-08T21:12:36+0900)ページtitleにスペースが2つ以上あったら1つにまとめるようにした。

参照

ApiDocumentation - bitly-api - Documentation of the bit.ly REST API methods - Project Hosting on Google Code

はてなブックマークRSS取得 - m-kawato@hatena_diary

bit.ly (短縮URL) API呼び出し (その1) - m-kawato@hatena_diary

bit.ly (短縮URL) API呼び出し (その2) - m-kawato@hatena_diary

はてなダイアリーの最新のエントリをTwitterにポストする - 名もないテクノ手

2009-11-11

[][][]はてなダイアリーの最新のエントリをTwitterにポストする

【注意】2010-08-16からパスワードによるログインではなく、OAuthによるログインへ仕様変更されました。従って、下記の情報は既に誤りになっております。


はてなダイアリーの最新のエントリをTwitterに自動ポストします。

f:id:seuzo:20091111002457p:image

まあきっとだれか書いているんでしょうけれど... 単にコピペをラクしたいってだけのことですけれど... さらにどんだけ頻繁に更新してんだよって話もありますが...^^ ruby1.9系で書いてみたかったの。

# coding: utf-8
require 'rubygems'
require 'twitter'
require 'open-uri'
require 'rss'

##設定
hatena_uri = "http://d.hatena.ne.jp/xxxUSERNAMExxx/rss"#はてなダイアリーのRSSのURL
twitter_uname = "xxxUSERNAMExxx"#twitterのユーザー名
twitter_pass = "xxxPASSWORDxxx"#twitterのパスワード

#RSSの取得と解析
hatena_rss = open(hatena_uri){ |file| RSS::Parser.parse(file.read) }#RSSの読み込みとパース
hatena_blog_title = hatena_rss.channel.title#ブログ名
hatena_title = hatena_rss.items[0].title#最新のエントリー名
hatena_link = hatena_rss.items[0].link
hatena_title.gsub!(/\[(.+?)\]/){"##{$1} "}#タグをハッシュタグに
hatena_data =  "#{hatena_title} - #{hatena_blog_title} #{hatena_link}"
if hatena_data.length > 140 then #140文字を超えていたらエラーで終了(ruby1.9以上)
	puts "Error. The number of characters are over 140."
	exit
end

#Twitterへの投稿
httpauth = Twitter::HTTPAuth.new(twitter_uname, twitter_pass)
client = Twitter::Base.new(httpauth)
client.update(hatena_data)

puts hatena_data

参照

Ruby Twitter Gem by John Nunemaker

Greenbear Laboratory - Ruby Twitter Gem簡易リファレンス

Ruby Twitter GemでTwitterに投稿 - Absolute Playing!

(追記:2010-05-28T12:11:11+0900)

はてなダイアリーのバージョンアップで、このスクリプトは用済みになりましたね。

はてなダイアリーのバージョンアップを実施しました ― iPhone、Twitter、SEO、複数ブログ、応答改善など - はてなダイアリー日記

2009-05-30

[]はてな記法でリンクを作成するブックマークレット

はてなダイアリーでリンクを書く時、はてな記法でURLとtitleを指定しますよね。他の方はどうしているのかよく知らないんですが、わたしはちょっと前からこんなブックマークレットを使っています。簡単なものですが、まあ便利。

javascript:(function(){alert('['+document.location+':title='+document.title.replace(/([\[\]<>&])/g,%20function(){return%20"&#"%20+%20RegExp.$1.charCodeAt(0)%20+%20";"})+']');})()

ダイアログが出るので(IE以外だとクリップボードに格納するのはめんどくさそうでした)コピーしてダイアリーに貼付けます。

f:id:seuzo:20090530165204p:image