gem install mysqlしてみた
ここを参考にしました↓
gemのインストールは成功したが・・・
riとRDocはエラー出まくり。ドキュメントだし、時間ないし放置プレーします。orz
[root@babydaemons /export/redmine-0.9.5]# gem install mysql -- --with-mysql-dir=/usr/local/lib/mysql Building native extensions. This could take a while... Successfully installed mysql-2.8.1 1 gem installed Installing ri documentation for mysql-2.8.1... No definition for next_result No definition for field_name No definition for field_table No definition for field_def No definition for field_type No definition for field_length No definition for field_max_length No definition for field_flags No definition for field_decimals No definition for time_inspect No definition for time_to_s No definition for time_get_year No definition for time_get_month No definition for time_get_day No definition for time_get_hour No definition for time_get_minute No definition for time_get_second No definition for time_get_neg No definition for time_get_second_part No definition for time_set_year No definition for time_set_month No definition for time_set_day No definition for time_set_hour No definition for time_set_minute No definition for time_set_second No definition for time_set_neg No definition for time_set_second_part No definition for time_equal No definition for error_errno No definition for error_sqlstate Installing RDoc documentation for mysql-2.8.1... No definition for next_result No definition for field_name No definition for field_table No definition for field_def No definition for field_type No definition for field_length No definition for field_max_length No definition for field_flags No definition for field_decimals No definition for time_inspect No definition for time_to_s No definition for time_get_year No definition for time_get_month No definition for time_get_day No definition for time_get_hour No definition for time_get_minute No definition for time_get_second No definition for time_get_neg No definition for time_get_second_part No definition for time_set_year No definition for time_set_month No definition for time_set_day No definition for time_set_hour No definition for time_set_minute No definition for time_set_second No definition for time_set_neg No definition for time_set_second_part No definition for time_equal No definition for error_errno No definition for error_sqlstate [root@babydaemons /export/redmine-0.9.5]#
hashtagsjpをスクレイピングしてはてダ用に変換するスクリプト
概要
Google Chrome 5.0 betaを騙って、hashtagsjpからつぶやきを取ってきて1行1tweetに変換します。
XPathを使ってるのでとっても見通しが良い実装だと自画自賛w
はてダに直接張れるHTMLを標準出力に吐き出しますが、cssは出力結果に合わせていぢって下さい。
ソースを晒しておく
#!/usr/bin/ruby require 'net/http' require 'rexml/document' include REXML class HashtagsJP attr_reader :timelines HTTP_HEADERS = { 'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2', 'Accept' => 'application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'Accept-Charset' => 'Shift_JIS,utf-8;q=0.7,*;q=0.3', 'Accept-Language' => 'ja,en-US;q=0.8,en;q=0.6', } HOST = "hashtagsjp.appspot.com" URI_ROOT = "http://" + HOST DIR = "/tweets/" XPATH_EXPR = '//html/' + 'body/' + 'div[@id="wrap"]/' + 'div[@id="main"]/' + 'div[@id="main_l"]/' + 'div[@class="box_body"]/' + 'div[@class="tl clearfix"]' def initialize(tag) @server = Net::HTTP.new(HOST, 80) @tag_path = DIR + tag @timelines = [] end def parse(html) html.delete!("\r\n\t") html.gsub!(%r|<script.+?</script>|m, "") html.gsub!(%r|<OBJECT.+?</OBJECT>|m, "") html.gsub!('<a href="/', '<a href="' + URI_ROOT + "/") html.gsub!(" ", " ") html.gsub!("&", "&") doc = Document.new html count = @timelines.count XPath.each(doc, XPATH_EXPR) do |element| tl = element.to_s tl.gsub!('</a></strong>', '</a></strong> ') tl.gsub!(%r|> +<|, "><") @timelines.push tl end tweets = @timelines.count - count STDERR.puts "parsed " + tweets.to_s + " tweet(s)." end def fetch(page) path = @tag_path.dup path << "/" + page.to_s if page != 1 html = self.get(path) self.parse(html) end def fetch_all(pages) 1.upto(pages) do |page| self.fetch(page) end end def get(path) req = Net::HTTP::Get.new(path) HTTP_HEADERS.each do |key, value| req[key] = value end STDERR.print "fetching: " + URI_ROOT + path + " ..." res = @server.request(req) STDERR.puts " done." res.body end end paegs = 1 begin raise "arguments error" if ARGV.count != 1 && ARGV.count != 2 tagname = ARGV[0] pages = ARGV[1].to_i if ARGV.count == 2 rescue STDERR.puts "usage: " + $0 + " hashtag [pages]" exit 1 end hashtag = HashtagsJP.new(tagname) hashtag .fetch_all(pages) timelines = hashtag.timelines while timelines.count > 0 do tl = timelines.pop.to_s puts tl end
使い方
例えば、#flosssのハッシュタグを2ページ分抜き出すには、下記のように実行します。
shingo@shingo-server:~$ ./tweet-format.rb flosss 2 > flosss.txt fetching: http://hashtagsjp.appspot.com/tweets/flosss ... done. parsed 20 tweet(s). fetching: http://hashtagsjp.appspot.com/tweets/flosss/2 ... done. parsed 9 tweet(s). shingo@shingo-server:~$
これからの勉強会は
事前のhashtagsjpへの公式ハッシュタグの登録と、帰宅してからのまとめエントリをお忘れなくw*1
以前C#でスクレイピングやりましたが
前のサイトと比べて綺麗なXHTMLだったので、Tidyのお世話にならなくて良かったです。というか脊髄反射的にTidyを通したらハマったというのはここだけのヒミツw
*1:先週金曜日の分を纏めようとしたら、もう無かった。orz
Python東海・Ruby勉強会hashtagまとめ
- たweb2pyのビデオデモを、youtubeに公開しました。ただし予定の半分。 #pyrbtokai #web2py #appengine
http://www.youtube.com/watch?v=RVh2viuBooQ - 今日のLT資料公開 - Iron Python / Iron Ruby で .NET Programming http://bit.ly/bwDRim #pyrbtokai
- RoRはControllerが空でもViewが表示されるのが、新鮮。 #pyrbtokai
- RT !babydaemons: Pythonの"_"はPerlの"$_"を連想させるけど、286のころのMS-Cのaxレジスタみたいな存在か。 #pyrbtokai
- #pyrbtokai Double Ruby勉強したい。gem install rr
- #pyrbtokai 発表で出てきた例は Ruby なら each を定義しても同じ感じ? def obj.each; [1,2,3].each{|i| yield i }; [:a, :b, :c].each{|i| yield i }; end
- ruby-pythonかpython-rubyかによってどちらの陣営かわかる #pyrbtokai
- 画面はSQL_FORM(tablename)で、これをdict(form=...)で返せばOK。勝手に構築してくれる #pyrbtokai
- #pyrbtokai How to become a HackerでPythonがおすすめ 英: http://catb.org/~esr/faqs/hacker-howto.html 日: http://cruel.org/freeware/hacker.html
- how to became a hacker < Pythonが広まった一因。ここでPythonを進めているらしい #pyrbtokai
- Ruby2.0はPythonでのPython3000にあたるのかな #pyrbtokai
- BatteryIncludedはPythonが好きな理由の1つかな #pyrbtokai
Ruby東海第5回ハンズオンの作品
#!/usr/bin/ruby require 'rss/1.0' require 'rss/2.0' require 'open-uri' require 'twitter' # url or local file source = "http://groups.google.co.jp/group/ruby-tokai/feed/rss_v2_0_msgs.xml" content = "" # raw content of rss feed will be loaded here open(source) do |s| content = s.read end rss = RSS::Parser.parse(content, false) twit = Twitter::Base.new("babydaemons@gmail.com", "rubytokai123") print "RSS title: ", rss.channel.title, "\n" print "RSS link: ", rss.channel.link, "\n" print "title of first item: ", rss.items[0].title, "\n" print "link of first item: ", rss.items[0].link, "\n" print "description of first item: ", rss.items[0].description, "\n" print "date of first item: ", rss.items[0].date, "\n" message = rss.items[0].title + ' ' + rss.item[0].link p message twit.post message
結局お買い上げ「基礎Ruby on Rails (IMPRESS KISO SERIES)」
教育訓練感想文で必要なので、結局Amazonで発注しました。読んだ感じでは環境が古いため絶対お勧めという訳ではないのですが、実運用されている架空の*1コミュニティ(草野球チーム)のサイトの実装を一から十まで見せてくれるので、持っていて損は無い1冊だと思います。ちなみにRubyについても一通り解説があるので、とりあえずRailsだけはできるRubyistになりたい方にはお勧めです。
基礎Ruby on Rails (IMPRESS KISO SERIES)
- 作者: 黒田努,佐藤和人
- 出版社/メーカー: インプレスジャパン
- 発売日: 2007/10/25
- メディア: 単行本
- 購入: 8人 クリック: 106回
- この商品を含むブログ (42件) を見る
(2009/12/03追記)
本書のサポートサイトでフォローがあるようです。hostingしてるのは監修のオイアクスさん。*2
- 『基礎Ruby on Rails』 読者サポートページ - Ruby on Rails with OIAX
- 『基礎Ruby on Rails』 初版第1刷 正誤表 - Ruby on Rails with OIAX
- 『基礎Ruby on Rails』 初版第2刷 正誤表 - Ruby on Rails with OIAX
また、題材に取り上げられているサイトのRails-2.2対応の作業記録が著者によってなされています。ちょっとでも実力がある方なら紙媒体でなくてもフォローがあるので大丈夫でしょう。i18nネタもやってるようです。*3
それから、ActiveRecord#validation_eachの例で271ページにちょっとしたネタが載ってます。「ぷぷぷっ」って感じw
という訳で良書なんですが…
正誤表ですが、じっくり読まなくてもtypoが見つかったので出版社のインプレスジャパンは何やってるんだろうって感じですけどね。spell checkerくらい掛ければいいのに。*4
同僚が買ったPDF版では正誤表の反映がされてないとのこと。改訂版はRails-2.x対応しないと出せないかもしれないけど現行版のPDFバージョンくらい正誤表の反映をやっといて欲しいというのが正直なところ。
正誤表の反映くらい、多く見積もっても契約社員で5人日くらいでできるでしょ?はっきり言って出版社の姿勢を疑います。*5
インプレスジャパンはアレなので…
オイアクスさんの読者サポートにメールを投げてみました。どんな回答が来るか楽しみww
From babydaemons@(snip) To kiso-rails@oiax.jp 日付 2009年12月3日14:50 件名 『基礎Ruby on Rails』 初版第1刷 正誤表について 『基礎Ruby on Rails』読者サポートご担当様 (snip)と申します。お世話になります。 http://www.oiax.jp/books/kiso_rails/errata-1-1.html から正誤表を印刷しようとしたのですが、ブラウザの 画面イメージどおりの印刷が不可能なので断念しました。 正誤表をモノクロプリンタでの印刷を考慮したPDFで 作成していただけると幸いです。 また、可能であればPDF形式で印刷可能なA4シール用紙に 訂正文章を印刷して切り貼りして書籍に物理的にパッチを 当てれるような仕組みを用意していただけると本当に助かります。 #紙テープ時代のパッチみたいですが。 お忙しいとは存じますが、ご検討頂けると幸いです。 宜しくお願いいたします。 P.S. 本書についてブログを書きましたので、よろしければご覧下さい。 http://d.hatena.ne.jp/babydaemons/20091202/1259738528
それで回答をいただきました
それもわずか16分後です!速いっっっっ!!!(from 株式会社オイアクス代表取締役黒田努様)
さすがはWeb系業界人。でも代表取締役なのにこのスピード感は尋常じゃないです。
PDF版正誤表についてはComming Soon!ということでした。
さらにReplyいただきました
ブログのご指摘はもっともです。できれば、<del> ~ </del> せずに、そのまま掲載を続けていただきたく思います。
という訳なので取り消し線は削除しました。
#もし、このエントリが勝手mirrorされててgitやSubVersionで
#リポジトリ管理されてたりしてたら履歴が相当楽しいことになってるなw
Ruby東海第3回勉強会ポジションペーパー
定時後に急遽作成。一時間遅れで合流する予定です。
確認画面を作ってDBに登録してみた
もう1ヶ月ほど昔になってしまいましたが、確認画面を作ってみた - babydaemonsの日記のあとで確認画面の後でDBに登録する例を作ってみました。
お題はお問い合わせフォーム(メール送信なし)です。
お持ち帰りはこちらからどうぞ。
たぶん、つっこみどころ満載ですので、コメント・トラバよろしくお願いします。m(_ _)m