2

私は Python を使用して Rdio API にかなりアクセスしてきたので、作業を楽にするために Rdio モジュールにいくつかのメソッドを追加することにしました。私は困惑し続けます。

背景として、同社が提供する Rdio Python モジュールの一部を次に示します。

class Rdio:
  def __init__(self, consumer, token=None):
    self.__consumer = consumer
    self.token = token

  def __signed_post(self, url, params):
    auth = om(self.__consumer, url, params, self.token)
    req = urllib2.Request(url, urllib.urlencode(params), {'Authorization': auth})
    res = urllib2.urlopen(req)
    return res.read()

  def call(self, method, params=dict()):
    # make a copy of the dict
    params = dict(params)
    # put the method in the dict
    params['method'] = method
    # call to the server and parse the response
    return json.loads(self.__signed_post('http://api.rdio.com/1/', params))

わかりました、すべて順調です。それらの機能は正常に動作します。そこで、 でプレイリストを でプレイリストにコピーするメソッドを作成することにしましkey1key2。コードは次のとおりです。

def copy_playlist(self, key1, key2):
  #get track keys from first playlist
  playlist = self.call('get', {'keys': key1, 'extras' : 'tracks'})

  track_keys = []   

  for track in tracks:
      key = track['key']
      track_keys.append(key)

  #convert track list into single, comma-separated string (which the API requires)
  keys_string = ', '.join(track_keys)

  #add the tracks to the second playlist
  self.call('addToPlaylist', {'playlist' : key2, 'tracks' : keys_string})

このコードは、ターミナルまたは外部 Python ファイルから実行すると正常に動作しますが、何らかの理由で Rdio クラスの一部として含め、Rdio オブジェクトを開始しrdioてプレイリスト メソッドを呼び出すと、常に次のようになります。エラー:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "rdio_extended.py", line 83, in copy_playlist

NameError: global name 'rdio' is not defined

私はこれを回避できないようです。おそらく簡単な答えがあります-私はプログラミングにかなり慣れていません-しかし、私は困惑しています。

更新: コードのフォーマットを更新しました。Rdio オブジェクトを作成する実際のコードは次のとおりです。

rdio = Rdio((RDIO_CONSUMER_KEY, RDIO_CONSUMER_SECRET), (RDIO_TOKEN, RDIO_TOKEN_SECRET))

そして、これはプレイリストのコピー関数を呼び出す行です:

rdio.copy_playlist(key1, key2)

その結果、上記の NameError が発生します。

4

0 に答える 0