ぷりどうぐ - ruby

ホーム > タグ > ruby

ruby

twitterに投稿されたゲレンデ写真を纏めたサイト+その他の技術情報

twitterに投稿された(略 をどうやって作成したかという技術メモ。

作成手順

以下の3ステップで作成しています。

  1. twitterAPIを利用して#snowJPの検索結果を収集する。
  2. 収集した検索結果を加工してRSS化する。
  3. 指定したRSSを自動投稿するプラグインをwordpressに導入し、2で加工したRSSを登録する。

1、2で使ってるプログラムは最後に紹介するとして。3はFeedWordPressというプラグインを利用します。

FeedWordPressでマルチブログする – [Mi]みたいなもの

これでRSSさえ作ってしまえば、最後のアウトプット先をWordPressにすることができます。普通こういうWebサービスは自分で”ガワ”をデザインするのですが

  • 自分のデザイン能力の低さ
  • wordpressの使いやすさ
  • 携帯やiPhone対応への手間(wordpressには携帯・iPhoneビュー用のプラグインもある)

など考えると、wordpressを使うのがベストかな、と判断しました。

ということで、後はRSSを作るだけ!スクレイピングもRSS作成も得意だからすぐだよね!…とはいかず。

苦労した点

1. twitterAPIのパース

twitterではスクレイピングを規約で明示的に禁止しているので、APIを使って情報を取得します。提供形式はjson、atomの2種類で慣れているatomを選んでrubyのrssライブラリでパースしよー♪…と思いきや、なぜか対応できないと跳ねられる。しかたないのでREXMLを使ってXML文章としてパースしたんだけど、REXMLの使い方をすっかり忘れていてパースするだけなのにめちゃ苦労しました。

2. RSS1.0と2.0の仕様の違い

1.で情報は取得できたので、それをRSSに流し込むだけ。…流し込むまでは良かったのですがRSS1.0では画像の展開ができないという制限を知らなかったので、RSS1.0で作ってしまい画像が表示されませんでしたとさ

3. FeedWordPressとrubyのrss/makerの仕様制限

RSS2.0で作成してFeedWordPressに読み込ませた!…のだけど、今度は改行が反映されないorz 調べたところ、どうやらFeedWordPressがRSS2.0を読み込む場合、

  1. 「content:encoded」があれば本文として使う。
  2. 「content:encoded」がなければ「description」として使う。ただし改行は反映されない。

仕様らしく、僕が作成したRSS2.0は「description」しか作ってなかったので改行コードが反映されなかったと。んじゃ「content:encoded」を作ればいいじゃん、というところですが、rss/makerライブラリの仕様でRSS2.0作成時には「content:encoded」を利用できない!

仕方ないのでRSS2.0を作成し文字列として読み込んだ後、「description」の下に1行挿入し「content:encoded」とする超泥臭い作り方で乗り切りました。うーん、RSSライブラリは完璧じゃないよなぁ…。

ということでコード公開

Continue reading

Web拍手&はてブ

下のボタンを押すと拍手を送ることができます。同時にメッセージも送れます。

はてブはこちら。このエントリーを含むはてなブックマークはてなブックマーク - twitterに投稿されたゲレンデ写真を纏めたサイト+その他の技術情報

twitterに投稿されたゲレンデ写真をまとめたサイト+その他を作りました。

タイトル通り、twitterに投稿されたゲレンデ写真を纏めるサイトを作りました。

twitterゲレンデ写真まとめサイト(仮)

※今は1つも写真投稿がないので、後述する「スノーボード関係の言葉が含まれた発言を検索しRSS」も合わせて投稿するようにしています。

どんなサイト?

以下の条件に引っかかる投稿を抽出し、画像サイトへのURLを変換し画像を直接表示します。

  1. ハッシュタグ「#snowJP」を含む
  2. 投稿内に「携帯百景」「はてなフォトライフ」「twitpic」のURLを含む

wordpress使ってるので携帯・iPhoneからも見れます。ハッシュタグ「#snowJP」を使ってどんどん雪山写真を投稿しよー!

サイトを作成した経緯

妄想開始。雪山好きのtwitterユーザーのためのポータルサイトがあればいいと思った。内容は雪山関係のpostをしているtwitterユーザー一覧(近々リリースされるtwitterのlist機能を使用)、ハッシュタグを利用したリアルタイム積雪&渋滞情報。12:22 AM Oct 2nd Tweenで

というか#09-10snowみたいなハッシュタグを流行らせたい。毎週土日に各地のゲレンデ写真が集まるだけで相当価値が出てくると思う。雪山ユーザーってゲレンデを略称で書いちゃっうから検索しにくい。それにmixiやら個人ブログやら情報が分散しすぎている。 12:26 AM Oct 2nd Tweenで

これをハッシュタグ一つで纏められる。ハッシュタグで纏められたポータルサイトが知名度を持ち始めれば、非twitterユーザーも注目する→雪山好きのtwitterユーザーが増える→俺のTLが充実するという一石三鳥。妄想終了。12:26 AM Oct 2nd Tweenで

毎週土日に最新の雪山写真がずらっと並んでるって最高じゃね!?

今後のロードマップなど

  1. #snowJPまとめサイトを立ち上げる ←今ここ
  2. 初期メンバーが#snowJPをつけてゲレンデ写真を投稿する
  3. twitterユーザーで雪山好きの人に#snowJPの存在を宣伝する
  4. 徐々に#snowJPへのゲレンデ写真への投稿が増える
  5. 毎週土日の朝はbuzztterで#snowJPがバズる
  6. 「twittetってなんか雪山情報充実してるらしぜー」とmixiから人が流れてくる。
  7. ますます#snowJPへのゲレンデ写真の投稿が増える
  8. ゲレンデの中の人も#snowJPの影響力を無視できなくなり、twitterアカウントを作成して#snowJP宛に最新のゲレンデ写真を毎日投稿する
  9. なんかすごい事になる

buzztterはともかく8が実現できたら最高ですよね。1つのサイト(ハッシュタグ)をチェックするだけで、例えば白馬エリア全ゲレンデのゲレンデ写真が確認できる。便利で楽しい!


これだけではしょぼいので。

ロードマップとか書いてみたけど、今は#snowJPの使用者が少ないので写真も少なくお寒い感じ。なので#snowJPが盛り上がるよういろいろ作ってみました。

1.#snowJPの全投稿をRSS配信

http://prius.cc/twit_snow_rss/snowJP.rss

普通に#snowJPでチェックすりゃいいじゃん、という話ですが、僕がRSSリーダー好きなので作ってみました。これはただのついで。重要なのは次から。

2.スノーボード関係の言葉が含まれた発言を検索しRSS配信(以下、雪山RSS)

http://prius.cc/twit_snow_rss/snowJP_All.rss

twitterの全投稿の中からボード関係の言葉が含まれるものを検索し1日1回RSS配信します。今は「スノーボード、イエティ、かぐら」が含まれる投稿を検索し、配信します。

3.スノーボード関係の言葉が含まれた発言を検索しRSS配信(新規雪山好きユーザー発見専用)

これは作成予定。
雪山RSSから既に#snowJPの存在を知ってるっぽいユーザーの発言を省いたRSSです。例えば@teracoや@winter_fanはNGユーザーリストに入っておりこのRSSには表示されません。NGユーザーリストは最初手動更新でtwitterのlist機能が正式リリースされたら雪山ユーザーのlistを作成→含まれてないユーザーの発言のみ表示して精度を上げようと思います。

2と3の雪山RSSはロードマップの3番「twitterユーザーで雪山好きの人に#snowJPの存在を宣伝する」ために作りました。今考えてるのは、

  1. この新規ユーザー発見専用RSSを購読する
  2. 新規ユーザーを発見したら@teraco_snowからハッシュタグ「#snowJP」の案内postを送る。
  3. 一度案内を送ったユーザーは3のリストから外す

という方法で、漏れなく重複なく#snowJPの普及活動を進めていく予定です。…となると、3を読むのは僕だけでいいのかなー。複数のユーザーから案内行ってもウザいだけだし…。

が、スキー・ボードの事について言及したユーザー全員に案内を送るべきかどうか?となると微妙。僕の本音としては#snowJPが有名になるとか投稿が増えるとかはどうでもよくて、#snowJPへの写真の投稿が増えてほしいだけなので、写真を投稿した人へは100%案内を送るけど、ただスキー・ボードの事について言及してるだけの人に案内送ってもなーと。当面は写真付きの投稿した人は案内送る・それ以外の人には送らないことにします。それ以外の人にも#snowJP案内送るなら、重複しないように#snowJP使ってる人と相談かなぁ。

とりあえず2のRSSは登録してみててください。読んでるだけでも楽しいと思うので。

Q&A

Q.twitterゲレンデ写真まとめサイトのデザインがしょぼいのですが?
A.すいません。やっつけで作ったのでそのうち改善予定です。wordpressのデザインなら俺/私に任せろ!という方は@teracoまでご連絡ください。

Q.雪山写真の地域別に表示を分けた方がいいのではないか?
A.今後投稿が多くなり、目的の地域を見つけにくくなれば考えます。

Q.#snowJPと別のハッシュタグを使ったほうがいいのではないか?(例:#snowJPPhotoなど)
A.当初そう考えましたが、携帯端末からの入力のしやすさ、#snowJPの認知度を高めるという意味で#snowJPに相乗りさせてもらおうと思います。複数のハッシュタグに分散するより1つに統一した方が信頼度が高まると思うので。今後投稿が増えて問題が発生したら or #snowJPが十分に周知されたらハッシュタグの分離も考えます。

Q.雪山RSSに、雪山と関係のない発言が含まれるのですが?
A.例えば「カムイ」で検索した場合、映画の「カムイ外伝」に関する発言も引っかかってしまいます。こういう場合は、以下のどちらかの対応を取ります。

  1. 検索ワードの精度を高める:例 「カムイ御坂」「カムイ竜ヶ崎」を使う
  2. 関係のないユーザーを非対象ユーザーとして今後発言を収集しない。

なるべく1の対応を取りたいと思ってます。

Q.雪山RSSに検索ワードを追加・削除してほしい
A.@teracoまでご連絡ください。

その他、何かあれば@teracoまでお気軽に。 最後に。何かと関東圏のユーザーが優遇されるtwitter界ですが、#snowJPでは日本全国の雪山ユーザーの投稿が集まるといいなーと思ってます!

技術情報に興味のある方はこちら。

Web拍手&はてブ

下のボタンを押すと拍手を送ることができます。同時にメッセージも送れます。

はてブはこちら。このエントリーを含むはてなブックマークはてなブックマーク - twitterに投稿されたゲレンデ写真をまとめたサイト+その他を作りました。

RMagick 2.9.0 for Windows インストール時の注意点。

■結論

RMagick 2.9.0(に同梱されているImageMagick)を使用するには、Visual C++ 2008のランタイムが必要である。


ということで、rubyで画像ファイルを生成できるRMagickというのがあるらしいので使ってみた。

■インストール

  1. RubyForge: RMagick: Project InfoからRmagickをダウンロード
  2. バイナリのImageMagickをインストール。ImageMagick-6.4.8-6-Q8-windows-dll.exeみたいなやつ。
  3. ダウンロードしたディレクトリに移動して、「gem install rmagick-2.9.0-x86-mswin32.gem」を実行。

ERROR: Error installing rmagick-2.9.0-x86-mswin32.gem:

rmagick requires Ruby version >= 1.8.5

おっと、rubyのバージョンが古かったようだw 本家よりダウンロードしてアップデート。

■そして嵌った。

どうやらRmagickのインストールは結構難しいらしい。

RMagick のインストール – まゆの日記

インストールで失敗するという噂の RMagick を入れてみようと思います。

Windows版は比較的簡単らしいが、冒頭のようにVC++が入ってないとエラーになるとかいろいろ躓きポイントあり。

RMagickをインストールしてみる(Windows) | Katawara.*

あと一番嵌ったのが間違ったテストコードを使っていたこと。

require ‘rubygems’

require ‘RMagick’

だけではダメで、3行目に

include Magick

が必要だったんですね。どんなバージョン組み合わせてもエラーが出て半日くらい嵌ってました。

※俺のruby知識のなさが証明された。

■使ってみる

【ruby】【RMagick】WEB2.0的なロゴを作る | earth

このページのテストコードが一番分かりやすかった。元ネタはここだと思いますが。その他、rubyで画像処理をするならモテる Ruby! – Ruby会議 2007 – 川o・-・)<2nd lifeが詳しい。


なぜこういう勉強をしているかというと、僕が重宝しているWebサービスのうちの一つ、雨量・雷観測情報のデータを解析したいからである。このリンクが東京都の雨量情報なのだが残念ながら携帯に対応していない。

そこで画像データを取得して携帯で見れるくらいに変換してやる。雨が降っていると地図上に青や紫の点が表示され、その間隔は毎回同じ。つまり青や紫の点の位置を特定して位置と紐付けてやれば、「○○市で○mmの雨」というデータが取得できるわけだ。

取りあえず今日はインストールだけで疲れたのでここまで。

Web拍手&はてブ

下のボタンを押すと拍手を送ることができます。同時にメッセージも送れます。

はてブはこちら。このエントリーを含むはてなブックマークはてなブックマーク - RMagick 2.9.0 for Windows インストール時の注意点。

なんか開発者になりそうなのでIDEに慣れてみる

魔法戦士→魔法使い程度のちょっとした社内ジョブチェンジをするかもなので、IDEに慣れるためいろいろ調べてみた。

■IDEとは

プログラムを開発するための支援ソフトウェア。プログラムなんて手書きで書けばいーじゃん、と思うかもしれないが、数100行を超えてくると変数名やモジュール名を管理するにも一苦労だしロジック間違いも多くなる。そんな時IDEなら、今定義してる変数名一覧を表示してくれたり、文法間違いを指摘してくれたりするので使いこなすと便利。欠点は使うまでにいろいろ準備が必要な事。数10行レベルのスクリプトをIDEで書くのはアホ。

■今までのIDE使用経験

Ruby用IDEのRDEを使ったことはある…が、入力支援と即時実行しか使ってないのでIDEの真の力を引き出したとは言いがたい。この手のツールはWindowsのショートカットキーを知らなくても使えるのと同じで、がんばって覚えようと思わないと一切成長しない。折角の機会なので1つのIDEを選び覚える事にする。

で、仕事で使うのはVisualStudioなのだが、僕の経験上、何かを学ぶには教科書だけでなく課題が必要である。プライベートでVBは書かないので、良く使うRuby用のIDEを習得する事にする。以下のページを参考。

Ruby on Rails用 統合開発環境(IDE) 比較レポート:CodeZine

汎用性が高く情報量が多そうなのでEclipse+RadRailsプラグインで開発してみる事にする。

Web拍手&はてブ

下のボタンを押すと拍手を送ることができます。同時にメッセージも送れます。

はてブはこちら。このエントリーを含むはてなブックマークはてなブックマーク - なんか開発者になりそうなのでIDEに慣れてみる

[N★B]フィルタ機能をリリースしました。

NEWSING★BOOSTER

newsingの特定の記事をフィルタした上で新着記事を表示する機能をリリースしました。

■残念ながらフィルタされちゃった人たち。

まずは言わずと知れたOhmynews。最近ウザいAskビデオ。そして名誉セルピカーwのfuwarinzさん(※1)は他のセルピクさんとは別扱いとさせて頂きました(けどフィルタ対象w)。セルピクリストは気づき次第追加していきます(※2)。Ohmynewsなんかは善意の人がpickするときもあるので、sunagimoさんの場合だけ除外するのでもいいですかねー。セルコメさんは除外するか迷いましたが、これも自推に近いものがあるなぁ…と思い隔離。

※1 いや…。記事の内容はいいと思うんですが。自推っていのうは俺の中で信頼性が低いんですよ(これについては別の機会に説明したい)
※2 そういや日常刺激ジャーナルの人、アカウント削除されちゃいましたね。

■困っていること

フィルタはフィルタでOKなのですが、当初は

「fuwaさんの記事はフィルタ。けど200pt以上の記事は表示」

みたいな事をやろうと思っていました。で、これは技術的にはできるのですが問題点があります。記事公開から時間が経って200ptを超えても表示されるのは後ろの位置なので結局気づかないのです。対策としては

「200ptを超えた時間を投稿時間とする」

ことで、擬似的に新着に表示させることはできますが、保存されているデータをいじらないといけないし今後の事を考えると付け焼き刃過ぎる対応かなぁと思いまして…。何か抜本的にな対策ないですかね?

■まぁ取りあえず

公言していた機能は全部実装しましたが、まだやりたいことあるので鋭意開発がんばりたいと思います。

…つーか自宅のクライアントPCでデータ取得してるのでたまにデータ取得できてない時があります。てごめんなさい。

■独自ptについての補足

N★Bの独自ランキングに使っている独自ptですが、今のところ

pt = 100pt+newsingのpoint/3+○コメント×30+×コメント×20
pickerが1stコメントの場合-80
n = (60×60×24-投稿時刻から経過した秒数/60×60×24)^2

として

pt×n

で出してます。nで使っている60×60×24というのは1日の秒数です。つまり記事が投稿してから1日経つと必ず人気エントリーから消えます。x軸を時間に取った1-x^2のグラフのイメージですね。

最初は48時間でやってたんですが同じ記事がTOPに残りすぎるので24時間にしました。ただ24時間だとnewsing側でコメントが伸びてるのにN★Bからは消えちゃうとかあるので、もうちょっと長いほうがいいかなぁ。今考えてるのはアクセスの少ない0時~8時は時間を進ませないようにすること。こうすれば24時間+8時間で32時間になるのでバランスがよくなりそうです。

Web拍手&はてブ

下のボタンを押すと拍手を送ることができます。同時にメッセージも送れます。

はてブはこちら。このエントリーを含むはてなブックマークはてなブックマーク - [N★B]フィルタ機能をリリースしました。

Home > Tags > ruby

Feeds
Meta

Return to page top