0

わかりました、Grooveshark ( http://grooveshark.com ) とやり取りする方法をプログラミングしています。現在、クラス Grooveshark といくつかのメソッドがあります。1 つはサーバーとのセッションを取得し、もう 1 つはセッションに基づくトークンを取得し、もう 1 つはサーバーへの API 呼び出しを構築するために使用されます (他のメソッドはそれを使用します)。今はこんな感じで使ってます…。

g = Grooveshark()
d = g.get_session()
d.addCallback(lambda x: g.get_token())
## and then something like.... ##
g.search("Song")

クラスを初期化した後でも、最初に2つのメソッドを呼び出す必要があるか、他のメソッドが機能しません。これを解決するために、API呼び出しを作成するメソッドがセッションとトークンを処理するように取得しようとしています。現在、これら 2 つのメソッド (セッション メソッドとトークン メソッド) はクラス変数を設定し、何も返しません (まあ None)。私の質問は、トークンとセッションを必要とするサイトとのインターフェイスに使用される共通の設計はありますか? また、トークンとセッションはサーバーから取得されるため、initメソッドで実行することはできません (API 呼び出しが行われる前にブロックされるか、実行されない可能性があるため)。

4

2 に答える 2

3

クラスを初期化した後でも、最初に2つのメソッドを呼び出す必要があるか、他のメソッドが機能しません。

もしそうなら、そのget_session部分をあなたのクラスに入れてみません__init__か?常に他の何よりも先に実行する必要がある場合、それは理にかなっているように思えます. もちろん、これは、クラスを呼び出すとまだ使用できないインスタンスが返されることを意味します。これは、非同期のイベント駆動プログラミングでは避けられないことです...「インスタンスが使用できるようになるまでブロック」しません。

1 つの可能性は、コールバックを呼び出すときに、実行するコールバックをクラスへの引数として渡すことです。より Twisted-normal なものGroovesharkは、deferred を返す関数にすることです (実行するコールバックを deferred に追加し、そのインスタンスが最終的に使用できるようになったときに、インスタンスを引数として呼び出します)。

于 2010-08-10T00:08:45.533 に答える
0

Facebook グラフ APIを参照することを強くお勧めします。セッションといくつかの認証が必要だからといって、きれいな REST API を構築できるわけではありません。Facebook は OAuth を使用して認証を処理しますが、他にも可能性があります。

于 2010-08-10T00:22:57.060 に答える