~ubuntu-branches/ubuntu/maverick/vlc/maverick

« back to all changes in this revision

Viewing changes to share/lua/playlist/youtube.lua

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler
  • Date: 2008-09-17 21:56:14 UTC
  • mfrom: (1.1.17 upstream)
  • Revision ID: james.westby@ubuntu.com-20080917215614-tj0vx8xzd57e52t8
Tags: 0.9.2-1ubuntu1
* New Upstream Release, exception granted by
    - dktrkranz, norsetto, Hobbsee (via irc). LP: #270404

Changes done in ubuntu:

* add libxul-dev to build-depends
* make sure that vlc is build against libxul in configure. This doesn't
  change anything in the package, but makes it more robust if building
  in an 'unclean' chroot or when modifying the package.
* debian/control: make Vcs-* fields point to the motumedia branch
* add libx264-dev and libass-dev to build-depends
  LP: #210354, #199870
* actually enable libass support by passing --enable-libass to configure
* enable libdca: add libdca-dev to build depends and --enable-libdca
* install the x264 plugin.

Changes already in the pkg-multimedia branch in debian:

* don't install usr/share/vlc/mozilla in debian/mozilla-plugin-vlc.install  
* new upstream .desktop file now registers flash video mimetype LP: #261567
* add Xb-Npp-Applications to mozilla-plugin-vlc
* remove duplicate entries in debian/vlc-nox.install

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
--[[
 
2
 $Id$
 
3
 
 
4
 Copyright © 2007 the VideoLAN team
 
5
 
 
6
 This program is free software; you can redistribute it and/or modify
 
7
 it under the terms of the GNU General Public License as published by
 
8
 the Free Software Foundation; either version 2 of the License, or
 
9
 (at your option) any later version.
 
10
 
 
11
 This program is distributed in the hope that it will be useful,
 
12
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 GNU General Public License for more details.
 
15
 
 
16
 You should have received a copy of the GNU General Public License
 
17
 along with this program; if not, write to the Free Software
 
18
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 
19
--]]
 
20
 
 
21
-- Helper function to get a parameter's value in a URL
 
22
function get_url_param( url, name )
 
23
    local _, _, res = string.find( url, "[&?]"..name.."=([^&]*)" )
 
24
    return res
 
25
end
 
26
 
 
27
function get_arturl( path, video_id )
 
28
    if string.match( vlc.path, "iurl=" ) then
 
29
        return vlc.strings.decode_uri( get_url_param( vlc.path, "iurl" ) )
 
30
    end
 
31
    if not arturl then
 
32
        return "http://img.youtube.com/vi/"..video_id.."/default.jpg"
 
33
    end
 
34
end
 
35
 
 
36
-- Probe function.
 
37
function probe()
 
38
    if vlc.access ~= "http" then
 
39
        return false
 
40
    end
 
41
    youtube_site = string.match( string.sub( vlc.path, 1, 8 ), "youtube" )
 
42
    if not youtube_site then
 
43
        -- FIXME we should be using a builtin list of known youtube websites
 
44
        -- like "fr.youtube.com", "uk.youtube.com" etc..
 
45
        youtube_site = string.find( vlc.path, ".youtube.com" )
 
46
        if youtube_site == nil then
 
47
            return false
 
48
        end
 
49
    end
 
50
    return (  string.match( vlc.path, "watch%?v=" ) -- the html page
 
51
            or string.match( vlc.path, "watch_fullscreen%?video_id=" ) -- the fullscreen page
 
52
            or string.match( vlc.path, "p.swf" ) -- the (old?) player url
 
53
            or string.match( vlc.path, "jp.swf" ) -- the (new?) player url (as of 24/08/2007)
 
54
            or string.match( vlc.path, "player2.swf" ) ) -- another player url
 
55
end
 
56
 
 
57
-- Parse function.
 
58
function parse()
 
59
    if string.match( vlc.path, "watch%?v=" )
 
60
    then -- This is the HTML page's URL
 
61
        while true do
 
62
            -- Try to find the video's title
 
63
            line = vlc.readline()
 
64
            if not line then break end
 
65
            if string.match( line, "<meta name=\"title\"" ) then
 
66
                _,_,name = string.find( line, "content=\"(.-)\"" )
 
67
            end
 
68
            if string.match( line, "<meta name=\"description\"" ) then
 
69
               -- Don't ask me why they double encode ...
 
70
                _,_,description = vlc.strings.resolve_xml_special_chars(vlc.strings.resolve_xml_special_chars(string.find( line, "content=\"(.-)\"" )))
 
71
            end
 
72
            if string.match( line, "subscribe_to_user=" ) then
 
73
                _,_,artist = string.find( line, "subscribe_to_user=([^&]*)" )
 
74
            end
 
75
            -- OLD: var swfArgs = {hl:'en',BASE_YT_URL:'http://youtube.com/',video_id:'XPJ7d8dq0t8',l:'292',t:'OEgsToPDskLFdOYrrlDm3FQPoQBYaCP1',sk:'0gnr-AE6QZJEZmCMd3lq_AC'};
 
76
            -- NEW: var swfArgs = { "BASE_YT_URL": "http://youtube.com", "video_id": "OHVvVmUNBFc", "l": 88, "sk": "WswKuJzDBsdD6oG3IakCXgC", "t": "OEgsToPDskK3zO44y0QN8Fr5ZSAZwCQp", "plid": "AARGnwWMrmGkbpOxAAAA4AT4IAA", "tk": "mEL4E7PqHeaZp5OG19NQThHt9mXJU4PbRTOw6lz9osHi4Hixp7RE1w=="};
 
77
            if string.match( line, "swfArgs" ) and string.match( line, "video_id" ) then
 
78
                if string.match( line, "BASE_YT_URL" ) then
 
79
                    _,_,base_yt_url = string.find( line, "\"BASE_YT_URL\": \"(.-)\"" )
 
80
                end
 
81
                _,_,t = string.find( line, "\"t\": \"(.-)\"" )
 
82
                -- vlc.msg.err( t )
 
83
                -- video_id = string.gsub( line, ".*&video_id:'([^']*)'.*", "%1" )
 
84
            end
 
85
            if name and description and artist --[[and video_id]] then break end
 
86
        end
 
87
        if not video_id then
 
88
            video_id = get_url_param( vlc.path, "v" )
 
89
        end
 
90
        if not base_yt_url then
 
91
            base_yt_url = "http://youtube.com/"
 
92
        end
 
93
        arturl = get_arturl( vlc.path, video_id )
 
94
        if t then
 
95
            return { { path = base_yt_url .. "get_video?video_id="..video_id.."&t="..t; name = name; description = description; artist = artist; arturl = arturl } }
 
96
        else
 
97
            -- This shouldn't happen ... but keep it as a backup.
 
98
            return { { path = "http://www.youtube.com/v/"..video_id; name = name; description = description; artist = artist; arturl = arturl } }
 
99
        end
 
100
    else -- This is the flash player's URL
 
101
        if string.match( vlc.path, "title=" ) then
 
102
            name = get_url_param( vlc.path, "title" )
 
103
        end
 
104
        video_id = get_url_param( vlc.path, "video_id" )
 
105
        arturl = get_arturl( vlc.path, video_id )
 
106
        if not string.match( vlc.path, "t=" ) then
 
107
            -- This sucks, we're missing "t" which is now mandatory. Let's
 
108
            -- try using another url
 
109
            return { { path = "http://www.youtube.com/v/"..video_id; name = name; arturl = arturl } }
 
110
        end
 
111
        return { { path = "http://www.youtube.com/get_video.php?video_id="..video_id.."&t="..get_url_param( vlc.path, "t" ); name = name; arturl = arturl } }
 
112
    end
 
113
end