smotrelka:Smotri.com APIの別のクライアント

何らかの理由で、提供するAPIを介してSmotri.comと連携するクライアントを作成することが決定されました。 私は言わなければならない、同様のトピックはすでにハブ( ここ )で滑っていたが、わずかに異なる性質のアプリケーションがそこに記載されていた。



そのため、プロジェクトの必須要件-クロスプラットフォームと比較的便利なGUIの存在-は、言語とプラットフォームにいくつかの制限を課しました。 おなじみの便利なC ++とQtという、かなり標準的なバンドルが選択されました。



API自体はXML-RPCまたはJSON-RPC呼び出しのコレクションであり、その説明はこちらです。 実際には、基本的なエンティティ(ビデオ、ユーザー、コメントなど)のセットと、コンテンツを操作するためのコマンドのセットで構成されています。 一般に、APIは非常に便利ですが、公開されているバージョンにはいくつかの欠陥がありますが、これは別の話です:)エコーはトラッカーチケットで見つけることができ、アドレスは少し高くなります。



技術部分の説明

APIを使用するために、JSONを使用するオプションを選択しました。 少し苦労した後、QScriptValueを介したJSON <-> Qtの問題と小さなバイクの作成が解決されました。 最初の段階は終了しました。休むことができます:)

次に、すべてのエンティティとコマンドに対して非常に愚かな単調なコードを書くという疑問が生じました。 もちろん、wikiから説明を取り除いてプラスコードを生成するジェネレーターのアイデアは、すぐに私の頭の中で生まれました。 そしてもちろん、彼女は人件費の面で自明ではないとソチモビ人にすぐに拒否され、最終的にはコードを手で書くことができたでしょう。 一般に、これはすべて真実ですが、夕方に多数のエンティティとはるかに多くのコマンドを見ると、非常に悲しく、しぶしぶジェネレーターを作成することにしました。 このソリューションの利点は明らかです-基本的な部分を書いた後、wiki形式を解析することで、目的の出力を簡単に作成できます。 一般に、このユーティリティは2晩ほどpythonで作成され、ほぼ同じ時間で、私たちとコンパイラをほぼ完全に満足させるものを生成し始めました。 同時に、私は、Sotimovetsが、この間、私のツールが生成するほとんどすべてを手動で書いていることを発見しました。D



一般に、1週間半後、チームと連携するためにすべてを再生成し、smotri.comと連携するためのほぼ完全に機能し、非常に便利なQtスタイルAPIを取得しました。 単体テストが書かれた少し後、すべてが合格することを確認しました。



この部分は現在安定しており、メインのSmotriApiクラスとほぼ同じインターフェイスを持つ個別のライブラリとして設計されています(すべてのコマンドが表示されるわけではありません)。



公開:
 uint videosListConverting(OptionalArgs o = OptionalArgs());
 uint commentsAdd(QStringテキスト、SmotriVideoId videoId、OptionalArgs o = OptionalArgs());
 uint commentsDelete(int commentId);
 uint videosRubricList();
 uint authAuthUser(QStringログイン、QStringパスワード、OptionalArgs o = OptionalArgs());
 uint testPreved(QStringメッセージ);

信号:
 void videosListConvertingDone(const smotrelka :: SmotriVideosListConvertingReply&reply、uint id);
 void commentsAddDone(const smotrelka :: SmotriCommentsAddReply&reply、uint id);
 void commentsDeleteDone(const smotrelka :: SmotriCommentsDeleteReply&reply、uint id);
 void commentsListDone(const smotrelka :: SmotriCommentsListReply&reply、uint id);
 void videosRubricListDone(const smotrelka :: SmotriVideosRubricListReply&reply、uint id);
 void authAuthUserDone(const smotrelka :: SmotriAuthAuthUserReply&reply、uint id);
 void testPrevedDone(const smotrelka :: SmotriTestPrevedReply&reply、uint id);






次に、GUIのサンプルバージョンが記述され、徐々に機能が目的の状態になりました。 現在、次の機能をサポートしています。



主な目標-ビデオ塗りつぶしの実装-は正常に完了しました。 ビデオのアップロードは、コンテンツタイプmultipart / form-dataの単一フィールド-ファイル自体(smotri.comで許可されている任意の形式がサポートされています)を使用したPOSTリクエストによって行われます。 現時点では、公開されているバージョンのAPIには、変換中の動画を表示したり、動画を削除したりするためのコマンドは実装されていません。 smotri.comホスティングが修正されたAPIでAPIのバージョンを更新するとすぐに、指定された機能がこのアプリケーションで機能します(エラーメッセージが発行されます)。



また、POSTを介して送信する前に、ファイルの内容全体がメモリに読み込まれるため、塗りつぶしが大きなファイルに適切にスケーリングしないことに注意してください(シーケンシャル読み取りの場合、QIODeviceを定義する必要があります。これは、読み取り時にHTTPヘッダーを返し、その後、ファイル)。 したがって、200メートルのビデオ(smotri.comでサポートされている最大サイズ)をダウンロードするには、クライアントに同じ量のメモリが必要です。 この欠点は修正される予定です。



残りの機能はまだかなり大まかな形式です。 たとえば、閲覧するためのビデオはブラウザから開きます(QtWebkitがFlashをサポートするQt 4.5のリリースでは、これも修正されます)。



開発について



このプロジェクトはオープンソース(GPL)です。 コードはSVNリポジトリから入手できます。 このアドレスには、ドキュメントを読んだり、最新バージョンのtarballや既製のアセンブリをダウンロードしたりできるwikiおよびバグトラッカーもあります。



誰かが開発に参加したい場合は、 Cc:フィールドと連絡先情報をツイーカーでトラッカーにチケットを作成し、同意します。



All Articles