2011/12/29(Thu)
twitter bot 認証用スクリプト
年の瀬もせまり何かと忙しい時期だと思いますが、なぜか急にツイッターボットを書きたくなりました。調べたら昔と違ってあれこれ面倒だったので備忘録をかねてメモ書きしておきます。
準備
oauth と twitter を使うので入ってない場合は、gem install oauth twitter して入れておきます。
必要事項を入力し↑[Create your Twitter application]ボタンをクリックします。無事に登録できたら[Setting]タブを開き
[Application Type] のところを Read and Write に変更し↑設定を保存します。ついでに、アプリケーションアイコン画像を自分のお気に入りの画像に設定しておきましょう。[Detail]タブの Access level が Read and write になってるのを確認し、Consumer Key、Consumer secret を表示させておきます。
bot アプリの認証作業
以下のやっつけスクリプトを実行します。
# -*- coding: utf-8 -*- require 'rubygems' require 'oauth' print "Input ConsumerKey :" ConsumerKey = STDIN.gets.chomp print "Input ConsumerKeySecret :" ConsumerKeySecret = STDIN.gets.chomp consumer = OAuth::Consumer.new(ConsumerKey, ConsumerKeySecret, :site => "http://twitter.com") request_token = consumer.get_request_token system("open #{request_token.authorize_url}") print "Input PIN-CODE :" pincode = STDIN.gets.chomp access_token = request_token.get_access_token(:oauth_verifier => pincode) puts <<EOF # -*- coding: utf-8 -*- require 'rubygems' require 'twitter' Twitter.configure do |config| config.consumer_key = "#{ConsumerKey}" config.consumer_secret = "#{ConsumerKeySecret}" config.oauth_token = "#{access_token.token}" config.oauth_token_secret = "#{access_token.secret}" end Twitter.update("ツイッターへの投稿テストなう〜") EOF
スクリプトを実行すると、Consumer Key と Consumer secret を求められるので入力すると PINコードの入力待ちになり、ブラウザで認証画面が開きます↓
認証ボタンを押すとブラウザに PINコード が表示され、その PINコードを入力すると、サンプルコードが表示されますので、適当なファイルにコピペして実行してみましょう。「ツイッターへの投稿テストなう〜」とつぶやくはずです↓
どうぞごりようください!
2011/12/07(Wed)
ワンライナー覚え書き
とある blogspot.com の過去記事を一括ダウンロードしたいなー、と思いちょろっとググったらこんなスクリプトを書いてる人がいました。
wget -q -O- "http://google.blogspot.com" | grep "archive.html" | sed -e 's/>[^<]*<//g' | sed -e "s/<a\ class='post-count-link' href='//g" | sed -e "s/'\/a>//g" | xargs wget -np -nc -l 1 -r
おおーこりゃ便利!!と、あっさり当初の目的は達成できたわけですが、sed の部分が気に入らないちょっくら ruby で書き直そう・・・などと強引に慣れないワンライナーで済まそうとアチコチぐぐって時間を浪費しうまく動かなくて、ワンライナーにするためのスクリプト書いて検証しちゃったりして(←よくあるパターン)、もう目的の過去記事のダウンロード終わってるのにまだスクリプトいじってて、嫌になったので重い腰をあげていつも調べてることをメモっとく。
コマンドラインオプション*1
| -e | 文字列をスクリプトとして解釈させる。必須。 |
| -n | 一行ずつ処理する。 |
| -p | 一行ずつ処理した後、print $_ してくれる。 |
| -r | ライブラリを読み込む。require 'rubygems' したいときは、-rubygems とか書くとスタイリッシュ(かも)。 |
ワンライナーの書き方忘れてたらざっと読む
http://www.fepus.net/ruby1line.txt
ついでに wget のオプション*2
| -nc | -no-clobber | 既にファイルが存在する場合はダウンロードで既存ファイルを上書きしない。 |
| -O | --output-document=FILE | ダウンロードした内容をFILEに出力する。 |
| -r | --recursive | 再帰ダウンロードを行う。 |
| -l | --level=NUMBER | 再帰ダウンロード時の最大階層深度をNUMBERに設定する。 |
| -np | --no-parent | 親ディレクトリ(フォルダ)を対象外にする。 |
| -N | --timestamping | タイムスタンプを比較して、ローカルに既に存在するファイルよりも新しいファイルだけを取得する。 |
微妙な出来・・
ruby -ropen-uri -e "puts open('http://google.blogspot.com').select{|e|e=~/archive.html/}.map{|e|e.scan(/'([^']+)'/)[1]}" | xargs wget -np -nc -l 1 -r
2011/09/14(Wed)
twitter をいじるメモ
書き捨てコードをメモっておきます
# -*- coding: utf-8 -*- # sample.rb require 'open-uri' require 'rubygems' require 'nokogiri' user = "kenkiti" url = "https://api.twitter.com/1/users/lookup.xml?screen_name=#{user}" doc = Nokogiri::XML(open(url)) doc.xpath("//user/status").each do |node| p node.xpath("source") end
実行結果↓
/Users/kenkiti/temp% ruby sample.rb "<a href=\"http://itunes.apple.com/us/app/twitter/id409789998?mt=12\" rel=\"nofollow\">Twitter for Mac</a>"



