暇なのでmixiニュースのアクセスランキング取得スクリプトを書いてみた

ボク自身はmixiを再開する気は全くないのですが、世間では依然として最大手のSNSサイトとして重宝されているようで、mixiに参加しているユーザの動向には非常に興味を持っています。

その中でも「mixiニュースのアクセスランキング」は、mixiユーザが普段どのようなニュースに興味を持っているかを把握する為の有益なネタのひとつであると考えており、ぜひとも収集しておきたい情報だと思っていたのですが、
ニュースを見るだけの為に普段使いもしないサービスにログインするのも非常にアホらしい
というジレンマを抱えておりました。

というわけで、
mixiニュースの総合アクセスランキング1〜20位を自動取得するスクリプト
ついカッとなって書いてみました。

ランキングページでは記事のリンクしか取得出来ないのですが、それだと中身を読むのに結局ログインが必要になってしまいます。
そのため、ついでに個別記事の文面も取得してしまっております。これでmixiいらず!

$ gem install mechanize

でMechanizeをインストールした上で、以下のスクリプトを実行します。

require 'rubygems'
require 'mechanize'

class MixiCrawler
  EMAIL    = "xxxxxxxx"
  PASSWORD = "yyyyyyyy"

  def ranking
    agent = Mechanize.new

    # ログイン画面
    agent.get("https://mixi.jp")
    agent.page.form_with(:name => "login_form") do |form|
      form.field_with(:name => "email").value = EMAIL
      form.field_with(:name => "password").value = PASSWORD
      form.click_button
    end

    # ホーム画面を表示後、ニュースランキング画面へ
    agent.get("http://mixi.jp/home.pl")
    agent.get("http://news.mixi.jp/show_ranking.pl?type=access")

    ranking = []
    (1..20).each do |i|
      news_title = agent.page.at("tr.rank#{i} td.newsTitle a").text
      news_link = agent.page.at("tr.rank#{i} td.newsTitle a")["href"]

      ranking << {:count => i, :title => news_title, :link => news_link}
    end

    # 個別のニュース記事画面
    ranking.each do |rank|
      agent.get("http://news.mixi.jp/#{rank[:link]}")
      rank[:article] = agent.page.at("div.article").inner_html
    end

    ranking
  end
end

# puts MixiCrawler.new.ranking

あとは煮るなり焼くなりご自由にどうぞ。