Vreenはvk.apiを操作するためのシンプルで便利なライブラリです



vk apiを操作するための新しいQtライブラリを紹介します。これは、vkと対話するデスクトップアプリケーションやモバイルアプリケーションを作成するときに役立ちます。 このプロジェクトは、qutIMのvkontakteプラグインから生まれ、誰もが使用できる独立した独立したライブラリに成長しました。





短いレビュー





Vreenは、C ++ 11 / Qtで記述されたvk.com apiのラッパーであり、モバイルおよびデスクトップアプリケーションを迅速かつ簡単に作成し、vk.com apiとの相互作用を既存のアプリケーションに埋め込むように設計されています。 ライブラリはいくつかの認証方法をサポートしており、必要に応じて独自の認証方法を追加できます。 また、vreenにはqmlへの完全なバインディングがあり、C ++で1行も記述せずにアプリケーションを作成できます。 必要な依存関係の数を減らすために、すべての認証方法は個別の静的ライブラリに移動されます。



主な機能:


  1. グループチャットを含むすべての種類のダイアログのサポート。
  2. ニュースフィード、壁の表示のサポート。
  3. 追加、いいね、再投稿などのコメントを処理します。
  4. 添付ファイルの操作のサポート。
  5. 対談者のステータスの追跡を含む名簿のサポート。
  6. オーディオ録音のサポート。
  7. 多くのXHTTPRequestに馴染みのあるスタイルでqmlからAPIを直接操作する機能。
  8. 拡張性。
  9. 独自のアプリケーションでライブラリを使用できる無料のLGPLライセンス。




基本:


APIを操作するための基本クラス:



APIリクエストを行う:

簡単なリクエスト:

QVariantMap args; args.insert("uids", join(ids)); args.insert("fields", fields.join(",")); auto reply = d->client->request("users.get", args); reply->connect(reply, SIGNAL(resultReady(const QVariant&)), this, SLOT(_q_friends_received(const QVariant&)));
      
      





resultReadyシグナルは、リクエストが完了するとスローされ、サーバーからの応答がQVariant jsonに変換されてエラーに変換されるか、エラーの場合は何も含まれません。この場合のエラーコードはreply-> error()に含まれます

さらに、返信に結果ハンドラー関数を追加することにより、受信者から結果の処理を隠すことができます。その場合、reply-> result()メソッドを呼び出すことで結果を取得できます。結果はQVariantの形式で返されます。 QVariant :: fromValueを使用して変換します。

  QVariantMap args; //TODO add chat messages support and contact check args.insert("uid", message.toId()); args.insert("message", message.body()); args.insert("title", message.subject()); return request ("messages.send", args, [](const QVariant &response) -> QVariant { return response.toInt(); });
      
      





返される値のタイプを明確に示すために、次のテンプレートマジックを適用できます。

  typedef ReplyBase<int> SendMessageReply; QVariantMap args; //TODO add chat messages support and contact check args.insert("uid", message.toId()); args.insert("message", message.body()); args.insert("title", message.subject()); return request<SendMessageReply> ("messages.send", args, [](const QVariant &response) -> QVariant { return response.toInt(); });
      
      





その結果、SendMessageReply :: result()スロットで、QVariantの代わりにintを返します。

  auto reply = static_cast<Vreen::SendMessageReply*>(sender()); m_unreachedMessagesCount--; int mid = reply->result();
      
      





一般に、APIとのやり取りはすべてシンプルで透過的です。



受け取りと組み立て



Vreenはサブモジュールを使用するため、ソースを取得する最良の方法です。

 $ git clone git://github.com/gorthauer/vreen.git $ cd vreen $ git submodule update --init
      
      





ビルドするには、cmake 2.8、Qt 4.7.4、およびC ++ 11(gcc 4.4 +、clang 3.0 +、msvc2010 +)の基本サポートを備えたコンパイラが必要です。

アセンブリ自体は非常に簡単です。

 $ mkdir build $ cd build $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr $ make $ make install (sudo)
      
      





リリースまたはリリースバージョンの作成について質問がある場合は、単純にcmakeのドキュメントを参照することをお勧めします。 実験的なオプションとして、qbsを使用したアセンブリがサポートされています。 qmake 'を使用してライブラリを構築することは可能ですが、この方法は公式にはサポートされていません。



C ++プロジェクトで使用する



接続


Vreenの他のプロジェクトに接続するには、pkg-configを使用します。したがって、ブラウザを介してvreenを標準の認証方法で接続するには、proファイルに行を追加するだけです。

 CONFIG += link_pkgconfig PKGCONFIG += vreen \ vreenoauth
      
      





pkgconfigをサポートしていないシステムの場合、LIBSとINCLUDEPATHを手動で追加するか、cmakeまたはqbsの検索スクリプトを記述できます。

興味がある人は、Qtのprfファイルを書くのを手伝うことができます。



使用する


例として、友達リストからすべての電話番号を引き出す小さなコンソールアプリケーションを見てみましょう。



開始するには、接続メソッド、アプリケーション識別子を指定してクライアントを初期化し、アプリケーションからAPIへのアクセス許可を持つウィンドウを作成するようにクライアントに要求します。

  auto auth = new Vreen::OAuthConnection(3220807, this); //  clientId   auth->setConnectionOption(Vreen::Connection::ShowAuthDialog, true); //     . auth->setConnectionOption(Vreen::Connection::KeepAuthData, true); //     setConnection(auth); connect(this, SIGNAL(onlineStateChanged(bool)), SLOT(onOnlineChanged(bool))); connect(roster(), SIGNAL(syncFinished(bool)), SLOT(onSynced(bool)));
      
      





クライアントがapiに正常に接続すると、onOnlineChangedスロットが呼び出され、そこから名簿から友人のリストを要求します。 プロンプトが表示されたら、受信するフィールドを選択できます。 すべての既知のフィールドに対して、最も一般的なフィールドオプションVK_COMMON_FIELDS、VK_EXTENDED_FIELDS、およびVK_ALL_FIELDSを持ついくつかのマクロがあります。

フィールドと取得したプロパティの説明は、 ここで読むことができます。

この場合、3つのフィールドのみに関心があり、重いリクエストでサーバーに負担をかける必要はありません。

  roster()->sync(QStringList() << QLatin1String("first_name") << QLatin1String("last_name") << QLatin1String("contacts"));
      
      





名簿の同期が正常に完了したら、結果を表示するだけです。

  qDebug() << tr("-- %1 contacts recieved").arg(roster()->buddies().count()); foreach (auto buddy, roster()->buddies()) { QString homeNumber = buddy->property("_q_home_phone").toString(); QString mobileNumber = buddy->property("_q_mobile_phone").toString(); qDebug() << tr("name: %1, home: %2, mobile: %3").arg(buddy->name()) .arg(homeNumber.isEmpty() ? tr("unknown") : homeNumber) .arg(mobileNumber.isEmpty() ? tr("unknown") : mobileNumber); }
      
      





連絡先にまだ定期的に実装されていないすべてのプロパティには接頭辞_q_が付いていますが、残りはゲッターまたはQ_PROPERTYで指定された名前から取得できます。



2番目の例として、qml apiを使用して、友達のリストを取得します。

Vreenサポートをqmlにインポートします。

 import com.vk.api 1.0
      
      





そして、クライアントを作成します。

  Client { id: client connection: conn //        C++   } OAuthConnection { id: conn Component.onCompleted: { //        ,      photoview' setConnectionOption(Connection.ShowAuthDialog, true); setConnectionOption(Connection.KeepAuthData, true); } clientId: 3220807 displayType: OAuthConnection.Popup //        }
      
      





client.connectToHostを介して単純に接続します。表示される確認ウィンドウでログインとパスワードを入力できるため、入力用に別のフィールドを作成することはできませんが、非常に簡潔なプロンプトに制限されます。



ダイアログのリストを表示するには、com.vk.api 1.0の既製モデルを使用できます。

  DialogsModel { id: dialogsModel client: client }
      
      





接続した後、最近のダイアログのリストを取得するには、リストを要求します。

  Connections { target: client onOnlineChanged: { if (client.online) { client.roster.sync(); dialogsModel.getDialogs(0, //    15, //  160 //   ); } } }
      
      





デリゲートで使用できるモデルプロパティは、その実装のコードで確認できます。

  roles[SubjectRole] = "subject"; roles[BodyRole] = "body"; roles[FromRole] = "from"; roles[ToRole] = "to"; roles[ReadStateRole] = "unread"; roles[DirectionRole] = "incoming"; roles[DateRole] = "date"; roles[IdRole] = "mid"; roles[AttachmentRole] = "attachments"; roles[ChatIdRole] = "chatId";
      
      





これらのフィールドを使用すると、ダイアログの完全にきれいなリストを取得できます。





同様に、フォトアルバムを作成します。



また、フォトアルバムを作成する場合は、vk.apiを使用してqmlを直接処理します。

  function getAll(ownerId, count, offset) { if (!offset) offset = 0; if (!count) count = 200; var args = { "owner_id" : ownerId, "offset" : offset, "count" : count, "extended" : 0 } var reply = client.request("photos.getAll", args) reply.resultReady.connect(function(response) { var count = response.shift() for (var index in response) { var photo = response[index] model.append(photo) } }) }
      
      





非常に簡潔かつ簡潔に判明しました。



おわりに



vreenの現在のバージョンは0.9.5です。実際、これはほとんどリリースです。つまり、ほとんどの場合、APIは変更されず、バージョン間のバイナリ互換性がサポートされることを意味します。実際の条件。

現時点では、APIサポートはまだ非常に不完全ですが、その上にラッパーを書くことは可能な限り簡単なので、さまざまな機能を実装したすべてのパッチに喜んでいます。

他の質問については、PMまたはjabberで回答する準備ができています。プロフィールで確認できます。

githubでフォークしてください



All Articles