友人の著者はこちら。
確かに、あなたが疑ったように、サポートをフレンドに追加するには、Ubuntuオンラインアカウントでのサポートが必要です。Friendsアーキテクチャは、すべての認証を行い、すべてのAPIキーを管理するために、UOAに大きく依存しています。私のお気に入りの例はLinkedInです。これは、これまでのところコミュニティが貢献した唯一のプロトコルだからです。UOAプラグインは、主に2つのXMLファイルに加えて、このように見えるautoconfのちょっとしたトリックです。(差分を少しスクロールすると、LinkedInが機能するために追加する必要があるすべてのものが明確に表示されます)。
プロトコルで同じことを行ったら、lp:account-pluginsに対してマージを提案し、Mardyにレビュー、承認、マージを依頼する必要があります。それが整ったら、フレンドプラグインの作成を開始できます。これはPython 3で作成されます。
現在、FriendsがGwibberで導入した主要な主要な改善点の1つは、サブクラスの使用です。元のGwibberコードでは、サブクラスではまったく何も行われなかったため、新しいプロトコルプラグインはすべて、さまざまな低レベル機能の巨大なコピーアンドペーストハックジョブでした。Friendsを実装するときは、共通の機能をスーパークラスに抽出するように細心の注意を払いました。スーパークラスは簡単にサブクラス化および変更できます。また、スーパークラスには非常に多くのdocstringがあり、開始時に参照する必要があります。残念ながら、これらをまだどこにも公開するようにsphinxを設定していないので、今のところコードを読むだけで済みます。
覚えておくべき重要なことは、クラスの名前が、大文字と小文字を区別せずに使用される「プロバイダ名」と一致する必要があるということです。したがって、providernameをに定義した場合instagram
、ファイルを作成し、protocols/instagram.py
Pythonクラスに名前を付ける必要がありますInstagram
。
プラグインが実際に何かをするために絶対に実装しなければならない2つの最も重要なメソッドは、と呼ば_whoami
れreceive
ます。これらはbase.py(上記にリンク)で詳しく説明されていますが、基本的に_whoami
メソッドは自動的に呼び出され、認証が行われたときにサービスによって提供された既に解析されたJSON blobを表す辞書に渡されます。運が良ければ、その辞書にはInstagramのユーザー名、ユーザーID、表示名が含まれますが、そうでない場合は、その情報を収集するために2次API呼び出しを行う必要があります。前もってFacebook._whoami
情報を提供せず、メソッド内からの追加のAPI呼び出しが必要なプロトコルの例を参照してください。Twitter._whoami
すぐに必要なすべての詳細を提供してくれたプロトコルの例。
その後、receive
メソッドは、新しいメッセージのサービスをポーリングするAPI呼び出しを行います。これはもう少し自由形式です。RESTAPIはすべて少し異なるため、ここで何を行う必要があるかを正確に把握するには、WebサイトのAPIドキュメントを参照する必要があります。http.py では、REST API呼び出しを簡単に行えるクラスUploader
とDownloader
クラスを提供し、JSONサーバーの応答を解析することもできます。これらの便利なクラスlibsoup
はGNOMEプロキシ設定を尊重するように構成されているため、これらの便利なクラスを使用することが重要です(Gwibberのプロキシサポートが常にいかにひどいものだったかを思い出すことができます。
サーバーからAPIレスポンスを取得したら、それをDeeModelに保存する必要があります(Gwibberはメッセージを保存するためにsqlite dbにダンプされたJSON blobを使用しましたが、基本的にはデータベースであるDeeModelを使用しています) DBus全体で状態を共有し、複数のクライアントがメッセージデータを簡単に表示できるようにします)。新しいメッセージを保存するという行為を「公開」と呼び、その便利なメソッドをで提供していBase._publish
ます。基本的にあなたがしなければならないことは、ここに空白を埋めることです。可能な限り多くの情報が可能な限り多くの列に記入されるようにしてください。_publishの可能な引数はschemaで定義されています。また、既存のプラグインを参照して、それらがどのように機能するかを確認できます。
ここまで到達したら、テストできる十分な容量が必要です。tools
ソースツリー内からコードを簡単に実行できるように、ディレクトリにいくつかのツールを提供しているため、変更するたびにシステムにインストールする必要はありません。あなたがすべきことは、1つのターミナルを開いて、ソースツリーのルートにcdし、実行すること./tools/debug_slave.py
です。それはDeeModelに接続し、発生したすべてを表示するので、メッセージが入ってくるとライブで表示されます。次に、2番目のターミナルで、ソースツリーのルートに再度cdし、実行./tools/debug_live.py instagram receive
してこれにより、Instagram.receiveメソッドが手動でトリガーされ、実行中に何が起こっているかを示すデバッグ出力の束が表示されます(log.debug("hi")
何が起こるかについてさらに詳しく知りたい場合)。
ああ、まだ読んでいるのなら、linkedinプラグインはまだtrunkに到達していませんが、ここでそれを見ることができます。
他に質問がある場合、私は常にfreenodeの#gwibberにいます。また、新しいコードベースはGwibberがこれまでに持っていたものよりもはるかに読みやすく、文書化が優れていると強く感じています。例で学ぶには難しすぎる。FacebookとTwitterが最も完全です。
友達に興味を持ってくれてありがとう!