Hatena::ブログ(Diary)

Hi-MEATBALL. このページをアンテナに追加 RSSフィード

2011-03-12

[]YouTubeなんちゃらかんちゃらから適当にプレイリスト引っ張ってきてwatchページのURLを列挙するだけ

試験運用中(?)らしい YouTube - Broadcast Yourself

検索してうまく引っかかるとプレイリストを作ってくれる。あんまり引っかからない。

プレイリストに入ってる曲のURL一覧を出力するだけのスクリプトを書いた。

ソース適当なのであとで直す。

#!ruby -Ks

require 'rubygems'
require 'cgi'
require 'open-uri'
require 'yaml'
require 'mechanize'

class YoutubeDisco
    def initialize keyword
        @youtube_uri = "http://www.youtube.com"
        @@agent = Mechanize.new
        @@keyword = CGI.escape(keyword)
    end

    def show
        search_path = '/disco?action_search=1&query='
        search_uri = @youtube_uri + search_path + @@keyword
        disco_uri = @youtube_uri + get_disco_path(search_uri)
        playlist_uri = @youtube_uri + get_playlist_path(disco_uri)
        get_playlist_videos_uri(playlist_uri)
    end

    def get_disco_path uri
        json = get_json(uri)
        disco_path = json['url'].sub(/\\/,'')
    end

    def get_playlist_path uri
        page = get_page(uri)
        (page/'//span[@id="quicklist-title"]/a')[0].attributes['href'].value
    end

    def get_playlist_videos_uri uri
        playlists = []
        page = get_page(uri)
        (page/'//li[@class="album-row "]/a').each { |row|
            play_uri = @youtube_uri + row.attributes['href'].value
            playlists.push(play_uri) # ってなんでですか〜〜〜
        }
        playlists
    end

    def get_page uri
        return @@agent.get(uri)
    end

    def get_json uri
        response = ''
        open (uri) { |f|
            response = f.read
        }
        YAML.load(response)
    end

    private :get_playlist_path, :get_playlist_videos_uri, :get_page, :get_json
end

keyword = ARGV.shift
p YoutubeDisco.new(keyword).show

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/himeatball/20110312/1299920415
リンク元