vkontakte用APIの付録。 Vkontakte APIを使用するための正しいアプローチ

みなさん、こんにちは!

ここではVkontakte APIを使って、スクリプトから直接アカウントやグループ/公開を完全に管理できます。 そしてPHPのすべて。 ちなみに、Rubyのための適切な宝石、そしてPHPのための宝石のためには、すでに無関係な情報が含まれています。 そして何をすべきか?

彼らが言うように、探している人は常に見つけるでしょう。 Githubの広がりでは、適切なプロジェクトが見つかりました - このソーシャルネットワークでの作業がかなり簡単になるVKPHPSDK

まず最初に、仕事には2つのオプションがあることに注意してください。

2)アプリケーションの作成とその後の作業のためのその後のユーザー認証。

要するに、違いのなに化合物。 最初のケースでは、許可なしにAPIに要求を作成し、さまざまなデータを受け取ることができます。 たとえば、特定のユーザーの友人のリスト、壁からの投稿などです。 ほとんどすべてのGET機能はaccess_tokenなしで利用可能です。 したがって、すべての種類の異なるパーサーや他のものがすでに切ることができます。

2番目のオプションは、レコードを発行したり、HealthContaineと一般に全アカウント管理をダウンロードする機能も意味します(ステータスを展示できます。 しかし、ここで作成する必要があります スタンドアロンアプリ (Webサイトのアプリケーションは選択されませんが、それから設定要求を作成するオプションはありません)およびユーザーのための特定の権限を取得します。

そう。 VKPHPSDKからの例を見てみましょう。

aPI( "getProfiles"、配列( "uids" \u003d\u003e $ vkphpsdk-\u003e getUserID()、 "フィールド" \u003d\u003e "uid、first_name、last_name、nickname、screen_name、photo_big"、)。 "私のプロフィール:(br /)"; エコー「(事前)」; //ここでサイトのパーサーが立ち往生している、私は彼らが何をすべきか推測できると思います\u003d)print_r($ result); エコー "(/ PRE)"; ?\u003e

ここでは、ユーザーに関するデータを入手してください。 フィールドはクエリに綴られています。

authorize()\u003d\u003d\u003d true)(// init vk.com sdk $ vkphpsdk \u003d new vkphpsdk(); $ vphpsdk(); $ vkphpsdk-\u003e setAccessToken($ oauth2proxy-\u003e getAccessToken()); $ vkpgpsdk-\u003e setUserID($ OUTH2Proxy-\u003e getUserID (); // API Call - Wall Post $ result \u003d $ vphpsdk-\u003e API( "wall.post"、配列( "wall.post"、array( "own_id" \u003d\u003e $ vphpsdk-\u003e getUserID()、 "メッセージ" \u003d\u003e "Wellcomeへのvkphpsdk ! "、);エコー「壁の後悔:(br /)」; echo"(pre) "; print_r($ result); echo"(/ pre) "; elsel echo"エラーが発生しました "; ?\u003e

しかし、すでにここに私たちはユーザーに壁にメッセージを投稿します。 このコードでページに移動した後、アプリケーションから正しい要求が表示されます。 ユーザがエントリが壁で満たされることを同意する場合。

アプリケーションを作成するときにclient_idとclient_secretを取得できます。

スコープパラメータは、実行が必要な実行が必要な機能を渡します。

この例では、オフラインを含むすべての機能を記録しました。 この機能の機能は、access_tokenを1回受信することができます。$ vkphpsdk-\u003e setAccessTokenとoauth2proxyでも呼び出さないようにすることができます。 その結果、アプリケーションはパスワードを変更する限り、1つの許可されたユーザーの権利を扱います。 あなたがボットを書いて、そしてそれがスクリプトからそれらを操縦するように承認されたらそれは便利になるでしょう。

そんな感じ。 あなたが見ることができるように、すべてがとても簡単です。 がんばろう! \u003d)

こんにちは、habr!

インターネットのためのインターネットのための緊急スペースのために、Vkontakte APIの合理的な使用のためにスペースを見つけることができ、私によって見つけられた唯一のライブラリは、一般的に受け入れられていない慣例を使用せずに、そして美しいコードなしで実装されました。 私は、根本的な誤解を修正し、私の図書館をVKontakte APIと協力させることにしました。
ハブラカットの下での詳細とアプローチ。

そのようなことは、AC APIが後で言及していない論理的な瞬間を除いて、かなりよく実装されていたことが起こりました。 しかし今日のスピーチは品質についてではなく、具体的な申請についてです。

説明に加えて、予約をする必要があります。私のライブラリにワークコードを作成し、私が記事の最後に与えるリンクを作成します。 ライブラリは最後の安定バージョン5.5で機能します。バッチ受信からジェネレータを削減すると、5.4で動作する必要があります。

  • サーバー認証(SO-B。ロギングサイト)
  • 顧客認証(スタンドアロン)
  • アプリケーションサーバーの承認
開発者にとって最も興味深いは、最初の2つを表します。 最初に、サイト上のユーザーを承認し、そのアクセスキーを取得することができます.2番目に、DekStopやMobileなどのアプリケーションを承認できます。 実行、前方、2番目のオプションは私たちに大きな機会を提供し、最初の、ただの部分のみを提供します。

最初のケースで入手するためのアルゴリズムは以下の項目に縮小されます。

  • ドキュメントに従ってフォーマットするユーザーを承認するためのリンクを表示します
  • ユーザーはそれを通過して記録します
  • ユーザーは、GETパラメータコードを使用して、アプリケーションのRedirect_URIにリダイレクトされます。
  • アプリケーションは、ユーザーアクセスキーを取得するためのAPIを含むAPIに要求を実行する必要があります。
  • APIは、アクセスキーまたはエラーを含むオブジェクトと応答します。

これを確認できるコード例は、トリッキーなビジネスではありません。

$ auth \u003d getjump \\ vk \\ auth :: getInstance(); $ AUTH-\u003e SETAPPID( "3470411") - \u003e SetScope - \u003e SetSecret( "Secret Code") - \u003e setRedirecturi( "http://localhost/test.php"); $ token \u003d $ auth-\u003e startCallback(); printf( "link"、$ auth-\u003e geturl());

私たちのドメインはlocalhost、および現在のtest.phpファイルであると仮定します。 すべてがうまくいった場合、$ token変数では、ユーザーのアクセスキーに承認が含まれます。

アクセスキーがある瞬間から、実行できます aPIに要求する 。 一般的なクエリロジックは単純で、特別に形成された要求をURL APIに渡します。 要求には、メソッドの名前、および引数が含まれていなければなりません。

api.vk.com/method/method_name?parameters&access_token\u003daccess_token。

メソッドのリスト これは豊かなものの1つです。 その中で、作業のアクセスキーを必要としないメソッドを満たすことができます。したがって、それらを呼び出すことはできません。

ライブラリを使用するときは、次のような基本オブジェクトを作成する必要があります。
$ vk \u003d getjump \\ vk \\ core :: getInstance() - \u003e Apiversion( "5.5") - \u003e SetToke($ token);

ライブラリを使用したクエリ例のペア:

それぞれの匿名関数を通して、1から100までのユーザーデータを含む100個のオブジェクト。注意関数呼び出しが発生した場合、オブジェクトが__callと__getが再定義されているため、リクエストは発生しません。私たちが本当にそれを必要とするときに要求をするために私たち。
$ vk-\u003e要求( "users.get"、 "user_ids" \u003d\u003e範囲(1,100)]) - \u003eそれぞれ(関数($ i、$ v)(場合は($ v-\u003e last_name \u003d\u003d "" )戻る$ v-\u003e last_nameを印刷してください。」
"; });

開くものの1つは、発電機 - バッチ領収書を使用します。 つまり、必要なときにのみデータが取得されます。 次の例では、すべての投稿を取得することができます。 方法 それはあなたがメッセージ、スタンドアロンアプリケーション、同じ承認およびそれに応じてアクセスキーを転送するための権限を必要とする。
foreach( "$ vk-\u003e要求(" messages.get ") - \u003eバッチ(100)($ Data-\u003eそれぞれ(関数($ i、$ m)(if(isset($ m - \u003e本文)) )$ M→本体を印刷する。PHP_EOL;);)

APIにある可能性がある良い方法 - 実行してください。 。 それは引数としてcodeパラメータを受け入れます、コードを述べる疑似JavaScriptでは、サーバー側でコードを満たすことができます。アプリケーションを編集するときに作成できるストアドプロシージャを実行できます。

私はこのことを迂回してそれをライブラリーに実装できなかった。 一言で言えば、それはあなたが一つとしていくつかの要求を実行することを可能にします。 次のサンプルコードを参照してください。

$ JS1 \u003d $ vk-\u003e要求( "messages.get"、["count" \u003d\u003e 200、 "オフセット" \u003d\u003e 0 * 200]) - \u003e tojs(); //オブジェクト型vkjs $ js2 \u003d $ vk-\u003e要求( "messages.get"、["count" \u003d\u003e 200、 "オフセット" \u003d\u003e 1 * 200]) - \u003e tojs(); $ JS3 \u003d $ VK-\u003e要求( "messages.get"、["count" \u003d\u003e 200、 "オフセット" \u003d\u003e 2 * 200]) - \u003e tojs(); $ JS4 \u003d $ VK-\u003e要求( "messages.get"、["count" \u003d\u003e 200、 "オフセット" \u003d\u003e 3 * 200]) - \u003e tojs(); $ JS1 - \u003e APPEND($ JS2)// JS2をJS1に追加します。 - \u003e append($ JS3) - \u003e APPEND()//実行したい(実際にはRequestTransactionを返します)。 - \u003e Response // Requestは今すぐです - \u003eそれぞれ(関数($ i、$ v)//最初の匿名関数は、実行から取得した配列のすべての要素をバイパスするために必要です(4つの要素の配列、4つの要求) ($ v-\u003eそれぞれ(関数($ c、$ d)(//各IF配列のすべてのメッセージの通過(ISSet($ d-\u003e本体))$ d-\u003e本体; //撤回このフィールドが存在する場合)));););

約束されているように、あなたが現在のバージョンのAPI(5.21)で会うことができるこれらの誤解の1つ(5.21)、メソッド

基本から始めましょう:APIは何ですか? 省略形は、アプリケーションプログラミングインターフェイス、またはプログラミングアプリケーション用のインターフェイスとして復号化されています。 その名前は、一見して、それ自身のために話すが、より詳細な説明を考慮することがより良いです。

既に述べたように、APIはまずインターフェースである。 開発者が既製されたブロックを使用してアプリケーションを構築できるようにするインタフェース。 モバイルアプリケーションの開発の場合、APIロールはスマートホームを操作するためのライブラリを実行できます。すべてのニュアンスはライブラリに実装されており、コードでこのAPIにのみアクセスできます。

Webアプリケーションの場合、APIは標準のHTML形式とは異なるデータを与えることができ、それはそれら自身のアプリケーションを書くときに使用するのに便利です。 サードパーティの公開APIは、XMLまたはJSONの2つの形式のうちの1つにデータを与えることがよくあります。 アプリケーションのAPIを作成する場合は、JSONがXMLよりもはるかにLaconicで読みやすいことを忘れないでください。XML形式へのアクセスを提供するサービスは後者を徐々に拒否しています。

例に関するWebアプリケーションのAPI

いくつかのアプリケーション - たとえば、GitHub - 他の開発者が利用できる独自のAPIを持っています。 彼らがそれを使用する方法は、APIが提供し、開発者がどのくらいうまく機能するかについての可能性によって異なります。 Githab APIは、例えば、ユーザ、彼のアバター、リーダー、リポジトリ、そして他の多くの有用性および興味深い情報に関する情報を受信することを可能にする。

同様に、Rubyを含む任意の言語でリクエストを送信できます。 要求への答えは、ほぼそのような情報になります。

( "ログイン": "Freika"、 "ID":3738638、 "Avatar_URL": "https://avatars.githubuserconent.com/u/3738638?v\u003d3"、「Gravatar_ID」: ""、 "URL": "https://api.github.com/users/freika"、 "html_url": "https://github.com/freika"、 "frowerters_url": "https://api.github.com/users/freika/followers"、「後_URL」: "https://api.github.com/users/freika/following (/other_user)"、gist_url: "https://api.github.com/users/freika/gists(/ gist_id)"、「starred_url」: "https://api.github.com/users/freika/starred (/owner)(/repo)"、「subscriptions_url」: "https://api.github.com/users/freika/subscripts"、orgorizations_url: "https://api.github.com/users/freika/orgs"、 "Repos_url": "https://api.github.com/users/freika/repos"、 "Events_URL": "https://api.github.com/users/freika/events(/ privacy)"、 "received_events_url": "https://api.github.com/users/freika/Received_Events"、 "type": "user"、 "site_admin":false、 "name": "evgeniy"、 "company": ""、 "blog": "http://frey.su/"、 "location": " Barnaul "、" Email ":" "、" Hirable ":True、" Bio ":Null、" Public_Repos ":39、" Public_gists ":15、" Froglower ":15、" Forgers ":21、" created_at ": 「2013-03-01T13:48:52Z」、「updated_at」:「2014-12-15T13:55:03Z」)

上記のブロックから分かるように、答えには、ログイン、アバター、サイト上のプロファイルへのリンク、およびAPI、ユーザーのステータス、公衆リポジトリの数、およびその他の有用で興味深い情報が含まれています。

1つのAPIが十分ではありません

あなたのアプリケーションのための本格的なAPIを作成します - ケースの半分だけ。 どのようにAPIに連絡するつもりですか? ユーザーはどのように連絡しますか?

注意事項になる最初のものは、必要な情報を取得するために通常のHTTPクエリシリーズであり、これが間違った回答です。 この場合に最も明白な方法は最も快適でシンプルではありません。 情報を取得して送受信するためのすべての必要な方法がAPIを使用して説明されるインターフェースを扱うための特別なライブラリを賢く創造します。

繰り返しになると、GitHubを利用して例をもたらします。この優れたサービスのAPIを使用する(およびインタフェースは広範な機能を提供)いくつかのライブラリは、GEMオクトキットなどのさまざまな言語で作成されています。 そのようなライブラリの文書(そしてGEMの例として提供される)では、興味のある開発者は、Hithabから情報を入手してサービスAPIを介して送り返すためのすべての必要な方法を見つけることができます。

したがって、あなたがあなた自身のAPIを作成した場合、最も一般的な言語でそれを取り組むために同じものとライブラリの作成を知り合いになることが可能であると考えてください。 そして、あなたのアプリケーションを要求する特定のレベルで、他の誰かがあなたのAPIを扱うためにあなた自身のライブラリを作成することができます。 これは正常です。

便利なリンク

その後の記事では、APIを正しく作成し、そのセキュリティを確保し、情報の一部へのアクセスを制限する方法について説明します。

早く以降にVkontakteのアプリケーションを開発することにした人は、そのような概念に直面する必要があります.IPI(アプリケーションプログラミングインターフェイス)は、リテラル変換でアプリケーションプログラミングインターフェイスを意味します。


よりシンプル - API。 これは、第三者で使用することができる、既製の機能、既製のクラス、定数などの全範囲です。 API VKontakteは絶えず確定化されており、今日はそれが可能なフル機能のサプリメントのセットです。

あなたはここで詳細な文書に知らせることができます。
この開発環境の最後のグローバルな変換は、2009年4月に行われました。 もちろん、その後部位が絶えず修正された。 API Vkontakteの基本的な機能に注意してください

  1. APIでは、友達へのアプリ、写真、ビデオ録音にアクセスがありました。 今のアプリケーション 独立してアルバムを作成し、情報を置きます。 以前は、これはそうではありませんでした。 そのようなアプリケーション自体をインストールするときのユーザは、そのようなアプリケーション自体を確定し、個人データへのアクセスを開くかどうかを決定する。
  2. メーリングアプリケーション通知 はい、それは時々厄介です ポップアップ通知 画面の左側にもAPIに実装されています。
  3. 申請書に友達を招待しています アプリケーションプログラミングインタフェースこの大量招待関数が実施された場所。 その後、これらの招待状は広告に使用され始めました。
  4. VKからの広告はアプリケーションページから消えました。 現在、VC自体のためのゲームまたはプログラムの開発者は、彼が彼の「フラッシュドライブ」に広告を必要とするかどうかを決定します。 もしそうなら - 彼は自分自身を配置してそれから取得する権利があります 100%の純利益.
  5. これらの開発者VKとして、アプリケーションを統合したユーザーは内部ネットワーク経済にアクセスしました。 単に置くこと、それは手頃な価格のAPIになります 内部計算としてVkontakteを使用してください.
  6. 機会 全画面モードでアプリケーションを起動します。 フレームの最大サイズの増加は、広告を備えた追加のバナーを収容することを可能にしたので、VCのためのアプリケーションの開発は単なる喜びではなく、広告を解決することにおいてかなり収益性の高い職業であり、彼からのバナーを販売しています。
  7. サードパーティのアプリケーションは今延長されます ニュースフィードを通して。 これはそれらを普及させるもう1つのステップです。 さらに(すでに長い前にさせて、アプリケーションにミニチュアアイコンが利用可能にしました)。
  8. アプリケーションの出力順序 APIにも実装されています。 今日、デフォルトでは、ほとんどの頻繁に始まったゲーム - あなたは最初の立場にあります。 それは長い間使用されなかった - リストの最後に見つかります。
  9. APIのおかげで利用可能になっています 詳細な組み込み統計。 今日あなたは簡単に訪問者、ページのビュー、性別、年齢、アプリケーションユーザーの場所を計算することができます。 すべての情報は、即座に構築されたフラッシュグラフの形でできるだけ視覚的になるようです。 これは主に広告(広告スペースの販売)のために行われます。 統計を取得するには、アプリケーションが何万もの人々を使用するのがわかります。 このようなアプリケーションでバナーを支払うことを確実に希望する広告主にこれを表示します。
  10. 最も人気のあるアプリケーションでは可能になりました 短いサブドメインを登録します 簡単な記憶とクイックアクセスのために(例えばchat.vk.comと類似の)。
  11. さて、ついに、機会がありました ユーザーの個人ページに関する情報の出力.

私はよく私に尋ねます aPIを使って仕事をする方法。 関連する最も人気のあるタスク API。、 - aPI Vkontakteを使った作業。 この記事では私は見せます vKontakte APIを使って作業する方法そして、最も重要なことには、それを見せてください すべてのAPIは一般的な原則に従って動作します。.

ここに 手順あなたがする必要があるか aPIの操作を開始します:

  1. 見つけるには ドキュメンテーション 希望による API。.
  2. 見て aPIに接続する例。 さまざまな選択肢があるかもしれません。 たとえば、1つのサービスでは、登録後に発行された秘密鍵が必要になります。 2回目のサービスでは、すべての要求に秘密鍵が必要ありません。 3番目のサービスでは、秘密鍵の両方があり、作業オプションがありません。 時々、秘密鍵は求められます トークン.
  3. コピー 簡単な既製のコード ドキュメンテーションサイトからその作業を確認してください。 動作していない場合は、サービスにほとんどないため、エラーを探します。
  4. 見つけるには ドキュメントで 方法これはあなたの仕事を解決します。
  5. 方法の例と説明を使用して、 aPIに正しい要求を送信してください.
  6. 応答形式に応じて、それを逆アセンブルする」 コンポーネント「そして、必要とされているもの - ユーザーを表示するには、ファイルに保存し、データベースに送信してください。

そして、以下の説明の例として、私たちは分析します API VKontakte.。 そう:

  1. リンク ドキュメンテーション.
  2. この場合、公開されている方法があり、したがってトークンを必要としないが、それを必要とするメソッドがあります。
  3. この場合、私は特定の言語の例を見つけませんでした。 おそらく彼らはそうですが、明らかに見えない。 通常、 API。 各方法については、さまざまな言語の例があります。
  4. 勝ちたい 特定のユーザーの壁からの最後の録音、そしてあなたのサイトにそれらを取り出す。 方法が必要です。

今私たちは aPIへの要求を送信するメソッドの説明を使用する。 私たちはそれを通してそれをやります PHP。:

$ wall \u003d file_get_contents( "https://api.vk.com/method/wall.get?v\u003d5.3&filter\u003dakingとdomain \u003dmyrusakov&count\u003d5");
print_r($壁);
?>

この場合、私は使います API 5.3。 (v \u003d 5.3。)、私は著者に関係なくすべての記録を取ります( フィルタ\u003dその他。)あなたのページから( domain \u003d Myrusakov。)量で 5 片手 count \u003d 5。)。 私はここですべてが非常に透明であると思います。

私たちはフォーマットで応答を得ました JSON。そして今、私たちは最後の点に移動する必要があります - 答えを逆アセンブルする」 コンポーネント「。それから私達は私達のサイトのページ上の多かれ少なかれ読みやすい形で壁からのエントリーを撤回します。 PHPコード:

$ wall \u003d file_get_contents( "http://api.vk.com/method/wall.get?v\u003d5.3&filter\u003djpおよびdomain\u003dmyrusakov&count\u003d5"); //リクエストを送信します
$ wall \u003d json_decode($壁); // JSON行を配列に変換します
$ wall \u003d $ wall-\u003e応答 - \u003eアイテム。 //コメントの配列を取得します
($ i \u003d 0; $ I)のために< count($wall); $i++) {
エコー "

「。($ i + 1)」. 「$ wall [$ i] - \u003eテキスト。 "
「.Date( "y-m-d h:i:s"、$ wall [$ i] - \u003e日付)。」

"; //レコードを撤回します
}
?>

あなたが見ることができるように、すべてがとてもシンプルです。 最も難しい部分は、コンポーネントを分解することです。 結果を出力するのが好きです API。 使って print_r。そしてこの処理を書きます。 メソッドの説明では答えの例を見ることができますが、パーサーを書きます。

トピックを続ける:
os

HTTPSが必要な場合は「サービスへのリンクを追加する」を登録したWebサービスがあります。 以下はインスタンスを作成するための私のコードです...