2010-06-19 65 views
1

我想通過下面的代碼將條目添加到YouTube播放列表中。當我將播放列表uri(http://gdata.youtube.com/feeds/api/users/nashrafeeg/playlists/0F4EF4B14F514476?client=Reddit+playlist+maker)傳遞給AddPlaylistVideoEntryToPlaylist方法時,我從獲取播放列表方法中得到錯誤,說出Invalid request URI。解決這個問題的最好方法是什麼?通過YouTube添加播放列表條目python api

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.findall(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('[email protected]', '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) 
+0

你是否可以做到這一點,米嘗試應用同樣的概念在iPhone使用目標C但不能成功 – Swati 2010-11-02 07:13:10

回答

0

不知道如何得到它,但如果你剝奪你對你的playlist_uri「/用戶/ [用戶名]」,它會工作。

實施例: playlist_uri

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

應該成爲

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

相關問題