こんにちは、Habr!
かつて、Vkontakte APIを合理的に使用するためにインターネットをサーフィンしていたのですが、わかりやすいものは見つかりませんでした。見つけた唯一のライブラリは、一般に受け入れられている慣習や美しいコードなしで実装されたものです。 私は既存の誤解を修正することに決め、Vkontakte APIを操作するためのライブラリを作成しました。
habrakatの下での燃焼の詳細とアプローチ。
そのため、VK APIは、いくつかの矛盾する点を除いて、かなりうまく実装されています。これについては、後で説明します。 しかし、今日のスピーチは品質に関するものではなく、特定のアプリケーションに関するものです。
すぐに予約が必要です。説明に加えて、作業コードをライブラリに持ち込みます。リンクは記事の最後に提供します。 ライブラリは、最新の安定バージョン5.5で動作します。バッチ受信からジェネレーターを切断した場合、5.4で動作するはずです。
承認を行う方法から始めましょう。
アクセストークン(アクセストークン)の取得に関しては、次の
3つの方法でこれを行うことができ
ます 。
- サーバー認証(いわゆるサイト認証)
- クライアント認証(スタンドアロン)
- アプリケーションサーバー認証
開発者にとって最も興味深いのは、最初の2つです。 最初の方法では、サイト上のユーザーを許可してアクセスキーを取得できます。2番目の方法では、DekstopやMobileなどのアプリケーションを許可できます。 将来に目を向けると、2番目のオプションは私たちに素晴らしい機会を提供し、最初のオプションはそのほんの一部です。
最初のケースの受信アルゴリズムは、以下のポイントの履行まで削減されます。
- ユーザーの承認のためのリンクを表示し、ドキュメントに従ってフォーマットします
- ユーザーがそれをクリックしてログインします。
- ユーザーは、GETパラメーターコードを使用して、アプリケーションのREDIRECT_URIにリダイレクトされます
- アプリケーションは、ユーザーアクセスキーを取得するために、コードを含むAPIリクエストを満たす必要があります
- APIは、アクセスキーを含むオブジェクトまたはエラーで応答します。
これを実行できるサンプルコードは、トリッキーなビジネスではありません。
$auth = getjump\Vk\Auth::getInstance(); $auth->setAppId('3470411')->setScope('SCOPE')->setSecret('SECRET CODE')->setRedirectUri('http://localhost/test.php'); $token=$auth->startCallback(); printf("<a href='%s' target='_top'>LINK</a>", $auth->getUrl());
ドメインはlocalhostであり、現在のファイルはtest.phpであると想定されています。 すべてがうまくいった場合、$トークン変数には認証に合格したユーザーのアクセスキーが含まれます。
アクセスキーを取得した瞬間から、
APIリクエストを実行
できます 。 リクエストの一般的なロジックは単純で、特別に形成されたリクエストをURL APIに渡します。 要求には、メソッドの名前と引数が含まれている必要があります。
api.vk.com/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN
メソッドのリスト 、これは豊富なAPIの1つです。 その中で、作業にアクセスキーを必要としないメソッドを見つけることができます。したがって、受信せずに呼び出すことができます。
ライブラリを使用する場合、次のような基本的なオブジェクトを作成する必要があります。
$vk = getjump\Vk\Core::getInstance()->apiVersion('5.5')->setToken($token);
ライブラリを使用したクエリのサンプル:
それぞれの匿名関数では、1〜100のユーザーデータを含む100個のオブジェクトが渡されます。関数呼び出しを削除すると、__ callおよび__getマジックメソッドが再定義されたオブジェクトが返されるため、要求は発生しません。本当に必要なときにリクエストを行うことができます。
$vk->request('users.get', ['user_ids' => range(1, 100)])->each(function($i, $v) { if($v->last_name == '') return; print $v->last_name . '<br>'; });
ジェネレーターの使用を明らかにしているものの1つは、バッチ受信です。 つまり、必要なときにのみデータを受け取ります。 次の例では、100件のリクエストですべてのメッセージを受信できます。注意してください。この
方法では、メッセージ、スタンドアロンアプリケーション、同じ承認、およびそれに応じてアクセスキーを転送する権利が必要です。
foreach($vk->request('messages.get')->batch(100) as $data) { $data->each(function($i, $m) { if(isset($m->body)) print $m->body . PHP_EOL; }); }
APIで見つけることができる優れたメソッドは
executeです。 codeパラメーターを引数として受け取ります。codeは、サーバー側でコードを実行できる擬似JavaScriptの一種です。また、アプリケーションの編集時に作成できるストアドプロシージャを実行することもできます。
私はこのことを無視できず、ライブラリに実装できました。 簡単に言えば、複数のクエリを1つとして実行できます。 次のコード例を参照してください。
$js1 = $vk->request('messages.get', ['count' => 200, 'offset' =>0 * 200])->toJs();
約束どおり、現在のバージョンのAPI(5.21)で発生する可能性のある誤解の1つである
users.getメソッドは、配列のような応答を返しますが、バージョン5から始まる
friends.getなど、他の場所では、フィールド数とアイテム、これは完全に論理的ではないように思えますが、APIを使用する場合は追加のコードが必要です。
ライブラリには、いくつかの操作のハンドラーもありますが、あなたの助けがあればさらに多くのことができます。
このライブラリを使用すると、非常に素晴らしく美しいコードを実現できます。これは、ハードビジネスで最も重要なことです。
コードに誤解やバグがあった可能性がありますので、ご注意をお願いします。プルリクエストは大歓迎です。
ほとんどの部分のライブラリは、PSR-0標準を満たしています。
Vkontakte APIが怖くなくても楽しいことをお見せできたことを願っています。
ご清聴ありがとうございました!
githubへのリンク:
github.com/getjump/VkApiPHP包括的なAPI
ガイド :
vk.com/dev/mainPSR-0:
github.com/getjump/fig-standards/blob/master/accepted/PSR-0.mdPackagist:
packagist.org/packages/getjump/vk更新:
Composer経由でインストール可能:
composer require "getjump/vk:*"
更新2:
現在、最小バージョンは5.4であり、理論的には(理論的にはその機能のほとんどは使用されません)、配列に短い構文を使用しない場合、最大5.3まで起動できます。