开发者

add playlist entry via youtube python api

i am trying to add entries to a playlist in youtube via the code below. when i pass the playlist uri (http://gdata.youtube.com/feeds/api/users/nashrafeeg/playlists/0F4EF4B14F514476?client=Reddit+playlist+maker) to AddPlaylistVideoEntryToPlaylist method i get from the get playlist method i get error saying Invalid request URI. what is the best way to fix this ?

import urllib,re
import gdata.youtube
import gdata.youtube.service

class reddit():

    def __init__(self, rssurl ='http://www.reddit.com/r/chillmusic.rss' ):
        self.URL = rssurl
        self._downloadrss()

    def _downloadrss(self):
        if self.URL.endswith('.rss'):
            # Downloadd the RSS feed of the subreddit - save as "feed.rss"
            try:
                print "Downloading rss from reddit..." 
                urllib.urlretrieve (URL, "feed.rss")
            except Exception as e:
                print e

    def clean(self):
        playList = open("feed.rss").read()
        links = re.fin开发者_如何学编程dall(r'(http?://www.youtube.com\S+)', playList)
        for link in links:
            firstPass = link.replace('">[link]</a>', '')
            secondPass = firstPass.replace('&fmt=18', '')
            thirdpass = secondPass.replace('&feature=related', '')
            finalPass = thirdpass.replace('http://www.youtube.com/watch?v=', '')
            print thirdpass, "\t Extracted:   ", finalPass
            return finalPass


class google(): 
    def __init__(self, username, password):
        self.Username = username
        self.password = password
        #do not change any of the following
        self.key = 'AI39si5DDjGYhG_1W-8n_amjgEjbOU27sa0aw2RQI5gOaoK5KqCD2Fzffbkh8oqGu7CqFQLLQ7N7wK0gz7lrTQbd70srC72Niw'
        self.appname = 'Reddit playlist maker'
        self.service = gdata.youtube.service.YouTubeService()

    def authenticate(self): 
        self.service.email = self.Username
        self.service.password = self.password
        self.service.developer_key = self.key
        self.service.client_id  =  self.appname
        self.service.source = self.appname
        self.service.ssl = False 
        self.service.ProgrammaticLogin()

    def get_playlists(self):
        y_playlist = self.service.GetYouTubePlaylistFeed(username='default')
        l = []
        k = []
        for p in  y_playlist.entry:       
           k=[]
           k=[p.link[1].href, p.title.text]
           l.append(k)
        return l

    def get_playlist_id_from_url(self, href):
            #quick and dirty method to get the playList id's 
            return href.replace('http://www.youtube.com/view_play_list?p=','')

    def creat_playlist(self, name="Reddit list", disc ="videos from reddit"):
        playlistentry = self.service.AddPlaylist(name, disc)
        if isinstance(playlistentry, gdata.youtube.YouTubePlaylistEntry):
            print 'New playlist added'
            return playlistentry.link[1].href

    def add_video_to_playlist(self,playlist_uri,video):
        video_entry = self.service.AddPlaylistVideoEntryToPlaylist(
        playlist_uri, video)
        if isinstance(video_entry, gdata.youtube.YouTubePlaylistVideoEntry):
            print 'Video added'
URL = "http://www.reddit.com/r/chillmusic.rss"

r = reddit(URL)
g = google('xxxxx@gmail.com', 'xxxx')
g.authenticate()

def search_playlist(playlist="Reddit list3"):
    pl_id = None 
    for pl in  g.get_playlists():
        if pl[1] == playlist:
           pl_id = pl[0]
           print pl_id
           break 
    if pl_id == None:
        pl_id = g.creat_playlist(name=playlist)
    return pl_id       
pls = search_playlist()
for video_id in r.clean():
    g.add_video_to_playlist(pls, video_id)


Don't know how to get it but if you strip your playlist_uri of your '/users/[username]' it will work.

Example: playlist_uri

http://gdata.youtube.com/feeds/api/users/[username]/playlists/[long_id]

Should become

http://gdata.youtube.com/feeds/api/playlists/[long_id]

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜