私は 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))
わかりました、すべて順調です。それらの機能は正常に動作します。そこで、 でプレイリストを でプレイリストにコピーするメソッドを作成することにしましkey1
たkey2
。コードは次のとおりです。
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 が発生します。