«前の日記(2007年 03月26日(Mon)) 最新 次の日記(2007年 03月28日(Wed))» 編集

日記のような何か

2002|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|08|09|10|11|12|
2020|01|02|03|04|06|07|08|09|10|11|12|
2021|01|02|03|04|05|07|08|10|11|12|
2022|01|02|03|04|05|06|07|08|10|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ようこそいらっしゃいました。
あなたは今日人目、合計人目のお客様です(ちなみに昨日は人のお客様がいらっしゃいました)。
よろしければツッコミに足跡等を残していって下さいな。

My status ← skypeやってます。


2007年 03月27日(Tue) [長年日記]

_ [Webサイト][mixi][ruby]get_mixi_new_diary_rss.rb

Pragger触ってたら仕事が進まない。

それはともかく。PRaggerプラグイン Mixi新着日記プラグインというのがあったので、これをもとにしてRSS出力させてみる事にした。

最初はget_mixi_new_diary.rb→get_html.rb→custom_feed.rb→save_rss.rbとやればいいのかな、とか思ってたんだけど、良く考えるとmixiにget_htmlなんて出来ないYo!

しかもcustom_feed.rbもイマイチ使い勝手が悪いし。という事でget_mixi_new_diary.rbをベースにcustom_feed.rbあたりの処理までやってしまうものを作ってみようという事に。

  • get_mixi_new_diary_rss.rb
def get_mixi_new_diary_rss(config, data)
  require 'rubygems'
  require 'mechanize'
  require 'kconv'
  require 'rss/maker'
# require 'logger'

  username = config['user_id']
  password = config['password']

  agent = WWW::Mechanize.new {|a|
#   a.log = Logger.new('access.log')
#   a.log.level = Logger::DEBUG
  }

  page = agent.get('http://mixi.jp/')
  form = page.forms[0]
  form.fields.find {|f| f.name == 'email'}.value = username
  form.fields.find {|f| f.name == 'password'}.value = password
  form.fields.find {|f| f.name == 'next_url'}.value = '/home.pl'
  page = agent.submit(form, form.buttons.first)

  if /url=([^"])"/ =~ page.body
    link = 'http://mixi.jp' + $1.to_s
    agent.get(link)
  end

  data = []
  diarylist = agent.get('http://mixi.jp/new_friend_diary.pl')
  diarylist.links.each do |link|
    diaryurl = link.href # => 'view_diary.pl?id=12345&owner_id=2345'
    if /view_diary.pl\?id/ =~ diaryurl
      item = ""
      page = agent.get(diaryurl)
      body = page.body.toutf8

      comment = []
      body.gsub(Regexp.new("<td CLASS=h12>(.*?)</td>",Regexp::MULTILINE)) do
        comment << $1
      end
      name = []

      body.gsub(Regexp.new("show_friend\.pl.id=\\d+\">(.*?)</a>",
Regexp::MULTILINE)) do
        name << $1
      end
      i = 1
      mydescription = comment[0]
      name.each do |n|
        mydescription += "<br>--<br>[#{n}]"
        mydescription += "<br><br>#{comment[i]}<br>--<br>"
        i += 1
      end
      item.instance_eval do
        @description = mydescription
        def description
          @description
        end
      end

      body =~ Regexp.new("<title>(.*?)</title>",Regexp::MULTILINE)
        mytitle = $1
        item.instance_eval do
          @title = mytitle
          def title
            @title
          end
        end

        body =~ Regexp.new("<td ALIGN=center ROWSPAN=2 NOWRAP
WIDTH=95 bgcolor=#FFD8B0>(\\d{4}).+?(\\d{2}).+?(\\d{2}).+?(\\d{2})
.+?(\\d{2})</td>",Regexp::MULTILINE)
        mydate = Time.parse($1 + $2 + $3 + ' ' + $4 + $5 + '00')
        item.instance_eval do
          @date = mydate
          def date
            @date
          end
        end

        mylink = 'http://mixi.jp/' + diaryurl
        item.instance_eval do
          @link = mylink
          def link
            @link
          end
        end

        data << item
      end
    end
  return data
end

本文はともかくコメントはどうしようか迷った挙句、適当に区切りをいれてみた。ソース自体もかなり適当。

  • config.yaml
- module: get_mixi_new_diary_rss
  config:
    user_id: ID
    password: PASS
- module: save_rss
  config:
    filename: mixi.rdf
    link: http://mixi.jp/new_friend_diary.pl
    title: mixi最新日記RSS

RSS自体はBasic認証がかけられるところに出力した方が良いと思われる。


Googleカスタム検索

my recommend books