soraなりの日々 - fc2 -

こころにひっかかったもの

[ruby]アーティストのニュースを自動取得

勉強がてらの第二弾。
(続くのかはわからんけどね、、)

itunes とかで聞いてるアーティストの
ニュースを自動で取れたら良いよねー、
とか思ったことないスか?

ないですか。そうですか。。。

このエントリーをはてなブックマークに追加
guitar magazine とかの音楽情報誌系を
買わなくなって久しい今日この頃。
ほんとウトいんすよね。こういう情報。

なんで、作ってみた。
itunes でかかってる曲のアーティストを
取得してそのアーティストのニュースを
取ってくるやつ。

ソース↓
#!/usr/bin ruby -Ku
#
# artist_news.rb -
#
# The source code packaged with this file is Free Software
#
# Copyright (C) 2008 by sora <sora dot hs at gmail dot com>.
#
require 'kconv'
require 'rubygems'
require 'rbosa'
require 'mechanize'

class MNewsLoad
#  @@gurl = 'http://www.google.co.jp/webhp?hl=ja'
  @@gurl = 'http://www.google.com/'
  @@gcontent = 'q'
 
  def initialize(url)
    @url = url
  end
 
  def search(artist)
    @agent = WWW::Mechanize.new()
    @agent.user_agent_alias = 'Mac Safari'
    page = @agent.get(@@gurl)

    form = page.forms.with.name("f").first
    form.q = artist + ' site:' + @url
    @agent.submit(form)
  end
 
  def get(url)
    @agent.get(url)
  end
end

class ITunes
  def initialize
    @itunes = OSA.app('iTunes')
  end

  def get_current_track
    track = @itunes.current_track
  end
end

class News
  def initialize(engine)
    @engine = engine
    if @engine == 0 then
      @load = MNewsLoad.new('http://www.excite.co.jp/music/news/')
    else
      @load = MNewsLoad.new('http://music.yahoo.co.jp/music_news/')
    end
    @itunes = ITunes.new()
    @track = @itunes.get_current_track
  end

  def start
    loop do
        self.get_news
        sleep(5)
    end
  end

  def get_news
    puts ''
    puts ''
    puts ''
    puts ''
    puts ''
    puts '----------------------------------------'
    print Kconv.kconv(@track.name, Kconv::UTF8) + "\n"
    print Kconv.kconv(@track.artist, Kconv::UTF8) + "\n"
    puts @track.duration
    puts @track.date_added.to_s

    news = @load.search(@track.artist)
    news.links.each do |link|
      if @engine == 0 then
        if  %r!^http://www.excite.co.jp/music/news/story/! =~ link.href
          page = @load.get(link.href)
          doc = page.root
          print Kconv.kconv(doc.search('.news_topicstitle').inner_text, Kconv::UTF8) + "\n"
          print Kconv.kconv(doc.search('.news_newstext').inner_text, Kconv::UTF8) + "\n"
          print Kconv.kconv(doc.search('.news_newstext_emp').inner_text, Kconv::UTF8) + "\n"
          sleep(20)
        end
      else
        if  %r!^http://music.yahoo.co.jp/music_news/d/! =~ link.href
          page = @load.get(link.href)
          doc = page.root
          print Kconv.kconv(doc.inner_text, Kconv::UTF8) + "\n"
          sleep(40)
        end
      end

      if self.is_changed? then
        break
      end
    end
  end
 
  def is_changed?
    track = @itunes.get_current_track
    if @track.artist != track.artist then
      true
    else
      false
    end
  end
end

s_engine = 0  # 0=excite, 1=yahoo
News.new(s_engine).start


動かすには、もちろん ruby の実行環境。
前回使った hpricot と mechanize が必要。
あと、今回 itunes の操作用に使った rubyosa がいるです。

なので、

gem install rubyosa

で rubyosa をインストール。

使い方は、、、

1.itunes で聞きたい曲をかける

artist_news


2.artist_news.rb を実行するだけ
   terminal にアーティストのニュースが
   表示されます。

artist_news02


3.違うアーティストにしたら、
   そのアーティストのニュースが
   表示されます。

artist_news03


最初、rubycocoa で作ろうかとしばし悩んだん
だけど、いろいろ考えたんだけど、結局 ruby で作ることにした。
なので、windows でも環境さえあれば動くはず。
(試してないけどね。誰かエロい人よろすくです。)

ま、rubycocoa で作るのは、次回ってことで、、、

あ、あと、一応ニュース元をヤフーとエキサイトで
切り替えられるようにしてます。
ヤフーは、さすがに引っ張ってくる情報が多いですが、
表示される情報の html が汚すぎ、、、
うまい事整理できなかったので、そのまま出してます。
なので、見づらいです。
エキサイトで使用されることをオススメします。
(デフォルトは、エキサイト)

テスト含めて、今日一日でバタバタと作ったんで、
バグとかあるやも知れません。
何かありましたら、ご一報お願いしますm(_ _)m
(傷害とかは、自己責任でお願いします。)


次、拡張する時には、beatjam に対応したいかな。
口開けてください。
お願いします、ジャストシステムさん(^^;

ps:
 さすがにテキストなしで ruby 勉強するのに
 限界を感じてきました。
 やっぱ、なんかテキスト買お。

no music, no life



※ 2008/2/11 追記
  ruby の ml にて、るびきちさんより非常に
  高度なアドバイスを頂きました!
  ありがとうございます。<るびきちさん

  数日後、反映して作り直したコードあげる予定です。

このエントリーをはてなブックマークに追加

コメント

BeatJamってなんですか?
アレって確か再生している曲の情報をどっかのサーバにアップロードしてアーティスト情報をwikipediaから取得して表示とかやってたような、やってなかったような。

ちょっと近いうち話しましょう。

  • 2008/02/12(火) 09:17:13 |
  • URL |
  • ヨスケ #-
  • [ 編集]

>ヨスケさん

beatjamは、ジャストシステムさんが
作ってる音楽ソフトです。
対応してみたいな、と単純に思っただけです。

こんどゆっくり話しましょう。

  • 2008/02/13(水) 00:59:31 |
  • URL |
  • sora #-
  • [ 編集]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://sora2hs.blog70.fc2.com/tb.php/247-f361d7d5
この記事にトラックバックする(FC2ブログユーザー)