ちょいと昔話
2次元の話ではなくてリアルな話で、学生時代にプログラミングセンスの塊のような人を見ていたので、自身の成長速度がいまいちな事も納得しているし、多くを求めてはいないのだけれど、やはりなかなか上手くスクリプトが書けないでいると正直しんどかったりする(´ω`)‥トホー
こないだの村上さんのところで、文章はとにかく練習です。という話があり、プログラミングも言語だし通じるところはあるよなぁと思ったり。村上春樹さんの作品は本当の戦争の話をしようしか読んだ事がなく、その作品も訳者としてのものなので原作はまだ読んだ事がなかった。積み本がまだ幾らか残っているので次回の周期にでも手を出そうかな。ε-(/・ω・)/
中田英さんと対談してたよなぁってそれは村上龍さんだったんだね。つい最近まで勘違いしていたのはちょっと内緒の話だ。Σ(・ω・;|||
今回はOAuth
最近はMechanizeばかりだったので、WebAPIを使うのは久しぶり。Mechanizeも認証は可能だけれどTwitterAPIを利用するので認証をOAuthで済ませてメソッドで分けようという魂胆です。
initializeはインスタンスを作ったときに必ず実行される部分になります。ここで認証します。initializeの意味的には初期化ということでした。
昔さくらのクラウドのAPIを題材にしたときに、自分のキーをウェブに吊るすという大チョンボをやらかして若干トラウマなので、ソースコードは最後にまとめて載せますw
即再発行したのでキャッシュがどこかに残っていても大丈夫です。
作成したメソッドは3種類
・ワード検索のgetword
・トレンド検索のtrend
・ポストのwordpost
機能はそのままで、いろいろ作りこむためのひな形ようにしているつもりです。
mainのメソッドで選択する形をとっているのですが、一人でやっているとこの辺をどうしたらいいのかなかなかうまくまとまらないですね。
参考サイト
RubyでTwitterAPIを叩いてみたら彼女が… | Septeni Engineers’ Blog | セプテーニ エンジニアブログ:
Trendはほぼそのままになっています…Σ(・ω・;|||
ソース
ソースです。※なぜかインデントが…(ω・`))(´・ω・`)(( ´・ω)
require 'rubygems' require 'json' require 'oauth' require 'kconv' require 'uri' METH = ARGV[0] class Twit #認証 def initialize consumer_key = "hoge" consumer_secret = "hoge" access_token = "hoge" access_token_secret = "hoge" con = OAuth::Consumer.new( consumer_key, consumer_secret, site:'https://api.twitter.com/' ) @ep = OAuth::AccessToken.new( con, access_token, access_token_secret ) end #日本語変換 def encode_ja(url) ret = "" url.split(//).each do |c| if /[-_.!~*'()a-zA-Z0-9;\/\?:@&=+$,%#]/ =~ c ret.concat(c) else ret.concat(CGI.escape(c)) end end return ret end #ワード検索 def getword print "keyword?-: " keyword=STDIN.gets.chomp res = @ep.request(:get, "https://api.twitter.com/1.1/search/tweets.json?q=#{encode_ja(keyword)}&lang=ja&locale=ja&result_type=mixed&count=10" ) result = JSON.parse(res.body) end #トレンドサーチ def trend res = @ep.request(:get, 'https://api.twitter.com/1.1/trends/available.json') result = JSON.parse(res.body) result.each do |avail| if avail["name"] == "Japan" then @japan_woeid = avail["woeid"] break end end res = @ep.request(:get, 'https://api.twitter.com/1.1/trends/place.json?id=' + @japan_woeid.to_s) japan_trends = JSON.parse(res.body) end #つぶやき def postword print "Message?-: " messages=STDIN.gets.chomp res = @ep.post("https://api.twitter.com/1.1/statuses/update.json", status: "#{messages}") result = JSON.parse(res.body) end end def main twitcatch = Twit.new case METH when "getword" mess = twitcatch.getword mess["statuses"].each do |message| puts "-------------------------------------------" puts message["user"]["name"] puts message["text"] end when "trend" japantrend = twitcatch.trend japantrend[0]['trends'].each do |trend| puts trend['name'] end when "postword" twitcatch.postword else puts "USAGE twittcatch.rb <getword or trend or postword>" exit end end main
いま実行するとこんな結果に。
getword
$ ruby twittcatch.rb getword keyword?-: C言語 赤松健 私がC言語をやっていたのはZ80時代だったので、8086時代になってセグメントが出来てから、ポインタが今どうなっているのか、想像できなくて恐い。 超絶腹ペコTEA君 C言語勉強中・・・ なかなか上手く行きませんな。 クライアント作者の毒舌な妹bot お兄ちゃん、C言語は読み書きできても、日本語の読み書きは下手だよね。国語力どうにかしたら? akira0422™ RT @chomado: 最初に触れた言語、 情報系出身→C言語から 独学→JSから が多いイメージ。 私は何からだったかなあ…? ちかよらんとこ C言語信者こわ 近寄らんとこ いまずー 猫でも分かるC言語と楽しく覚えるC言語で脳細胞を著しく傷めた 最新ネットビジネス副業的アフィリエイト 出来そうって思ったら早い者勝ちですよ? C言語 glut カーナビゲーション5,000 円 ~ 50,000 円 http://t.co/zlF3nLZaqM 影虎 ただ慣れてるBASIC基準で良かった。C言語ならどうしようかと… クライアント作者の毒舌な妹bot お兄ちゃん、C言語とJavaしかできないくせにiPhone使ってるんだね。 東大就活2016【公式】 【SPI非言語/問題例】 AはP地点からQ地点に向かい時速4km、BはQ地点からP地点に向かい時速8kmの速さで同時に出発する。P地点とQ地点との距離が2.4kmだとAとBが出会うのは2人が出発して何分後か。 (A)10分後 (B)12分後 (C)14分後 解答:(B)
trend
$ ruby twittcatch.rb trend #結婚のあとに予測変換でプロポーズしてみる #初めて聴いたボカロ曲 #自分の名前の最初と最後を取ったらきっとカワイイ iTunes Store MI作戦 #身長と年齢晒してイメージ違ったらrt ミギー トライオン ASAS発売 時の間
POST は省略して実験でPOSTしたのを。
書き込みテスト
— たけけん (@TakekenTw) 2015, 3月 11
まとめ
GUIが苦手なので、ひとまずCUIで基本を作ってからGUIに移行させつつ。という戦略をとろうかと思っています。