Comment travailler avec l'API VKontakte. Se connecter et travailler avec vk api

Salut tout le monde!

Je souhaitais travailler avec l'API VKontakte afin de pouvoir gérer entièrement mon compte et mes groupes/publics directement à partir de scripts. Et tout est fait en PHP. À propos, il existe un Gem approprié pour Ruby, et pour PHP, il existe de nombreux articles, dont la moitié contiennent déjà des informations non pertinentes. Alors, que devrions-nous faire?

Comme on dit, celui qui cherche trouve toujours. Un projet approprié a été trouvé sur GitHub - vkPhpSdk, ce qui simplifie grandement le travail avec ce réseau social

Pour commencer, je note qu'il existe deux options pour travailler ici :

2) Avec la création d'une application et l'autorisation ultérieure de l'utilisateur pour le travail.

Je vais expliquer brièvement les différences. Dans le premier cas, vous pouvez simplement faire des requêtes à l'API sans aucune autorisation et recevoir diverses données. Par exemple, une liste d'amis d'un utilisateur spécifique, des messages du mur, etc. Presque toutes les fonctions get sont disponibles sans access_token. Par conséquent, toutes sortes d'analyseurs différents et d'autres choses peuvent être découpées de cette manière.

La deuxième option suppose également la possibilité de publier des dossiers, de télécharger du contenu médical et généralement de gérer entièrement votre compte (même les statuts peuvent être définis, mdr). Mais ici, il faut aussi créer Application autonome(Ne sélectionnez pas d'application pour un site Web ; il n'est pas possible d'en faire des requêtes définies) et obtenez certains droits sur celle-ci auprès de l'utilisateur.

Donc. Regardons un exemple de vkPhpSdk :

api("getProfiles", array("uids" => $vkPhpSdk->getUserId(), "fields" => "uid, prénom, nom, surnom, nom_écran, photo_big",)); echo "Mon profil :(br/)" ; echo "(pré)"; //l'analyseur sur le site est en train de foirer, je pense que vous pouvez deviner ce qui doit être fait =) print_r($result); echo "(/pré)"; ?>

Ici, nous recevons simplement des données sur l'utilisateur. Les champs sont précisés dans la demande.

authorize() === true) ( ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​>getUserId ()); // Appel API - post mural $result = $vkPhpSdk->api("wall.post", array("owner_id" => $vkPhpSdk->getUserId(), "message" => "Bienvenue à vkPhpSdk !",)); echo "Réponse au message mural : (br /)"; echo "(pre)"; print_r($result); echo "(/pre)"; ) else echo "Une erreur s'est produite"; ?>

Et maintenant, nous publions ici un message sur le mur de l’utilisateur. Après avoir visité la page avec ce code, une demande de droits de l'application apparaîtra. Si l'utilisateur est d'accord, une publication est publiée sur son mur.

Client_id et client_secret peuvent être obtenus lors de la création de l'application

Le paramètre scope passe à l'autorisation de fonction à exécuter dont l'application a besoin

Dans cet exemple, j'ai noté toutes les fonctions, y compris hors ligne. La particularité de cette fonction est telle qu'après avoir reçu une fois un access_token, vous pouvez simplement le pousser dans $vkPhpSdk->setAccessToken et même ne pas appeler Oauth2Proxy. En conséquence, l'application fonctionnera avec les droits d'un utilisateur autorisé jusqu'à ce qu'il modifie le mot de passe. Cela sera utile si vous écrivez un bot et, après l'avoir autorisé une fois, vous le contrôlerez à partir du script.

En quelque sorte comme ça. Comme vous pouvez le constater, tout est en réalité très simple. Bonne chance! =)

Les réseaux sociaux font depuis longtemps partie de nos vies. Presque tous les utilisateurs disposent d'une page personnelle sur des services tels que VKontakte, Facebook, Twitter et autres. Et comme ces services sont très populaires de nos jours, ils ont créé une API spéciale. En utilisant les méthodes fournies par l'API d'un système spécifique, vous pouvez obtenir une liste d'utilisateurs, une liste de photos, même trouver tous les utilisateurs dans une certaine zone sur la carte, la liste des actions est très longue.

Cependant, tous les utilisateurs ne peuvent pas accéder à ces données. La plupart des services nécessitent une inscription et la création d'une application spéciale qui fonctionnera avec les méthodes d'un service spécifique.

Ainsi, aujourd'hui, nous examinerons un exemple de travail avec l'API VK, dans lequel nous recevrons une liste d'utilisateurs portant le nom « Masha » dans la ville « Moscou ». Nous chercherons Mash à Moscou. :)

Tout d'abord, nous devons créer une application. Pour créer une application, suivez le lien ( https://new.vk.com/dev -> Créer une application).

Entrez le nom et puisque nous analysons un exemple en PHP utilisant un serveur Web, sélectionnez le type d'application - " Site web". Nous indiquons l'adresse de votre site et le domaine de base (si vous le faites sur un serveur web local, écrivez http://localhost). Cliquez sur le bouton « Connecter le site » et votre candidature est créée, une partie du chemin est complétée.

Commençons la programmation. Il existe de nombreux cours pour travailler avec les API de sites Web, mais nous écrirons tout nous-mêmes pour comprendre les principes de fonctionnement de base.

Pour accéder aux méthodes API, vous devez suivre plusieurs étapes :

  1. Autoriser l'utilisateur ;
  2. Obtenez une clé d'accès ;
  3. Obtenez access_token ;
  4. Exécuter une requête vers une méthode ;

4 étapes simples, mais en réalité un peu plus compliquées.

Autoriser l'utilisateur :

session_start(); $client_id = "1234567"; $redirect_uri = "http://localhost" ; $affichage = "page" ; $scope = "amis, groupes" ; $response_type = "code" ; $auth_uri = "https://oauth.vk.com/authorize?client_id=($client_id)&display=($display)& redirect_uri=($redirect_uri)&scope=($scope)&response_type=($response_type)&v=5.52 " ;

Regardons point par point ce qui est écrit ici :

  • $client_id— votre identifiant de candidature attribué par le système ;
  • $redirect_uri— la page vers laquelle l'utilisateur sera redirigé après une autorisation réussie ;
  • $affichage— comment la page de connexion est affichée, dans ce cas ce sera une page séparée ;
  • $portée— autorisations pour l'application, séparées par des virgules. Liste complète ;
  • $response_type— type de réponse, dans ce cas JSON sera fourni ;
  • $auth_uri— nous formons une chaîne pour l'autorisation de l'utilisateur, en passant les paramètres nécessaires ;

Nous obtenons access_token :

if(isset($_GET["code"]))( $code = $_GET["code"]; $client_secret = "you_application_password"; $acces_uri = "https://oauth.vk.com/access_token"; $ field = array("client_id" => $client_id, "client_secret" => $client_secret, "redirect_uri" => $redirect_uri, "code" => $code); $acces_uri .= "?client_id=($fields[" client_id"])&"; $acces_uri .= "client_secret=($fields["client_secret"])&"; $acces_uri .= "redirect_uri=($fields["redirect_uri"])&"; $acces_uri .= " code=($fields["code"])"; $res = file_get_contents($acces_uri); $response_string = json_decode($res,true); $_SESSION["token"] = $response_string["access_token"];

Tout est assez simple ici, nous écrivons le code résultant dans la variable $code, créons un lien avec les données dont nous avons besoin - $access_uri. Ensuite, à l'aide de la fonction file_get_contents, nous exécutons la requête et en réponse nous recevons un objet JSON que nous décodons immédiatement en tableau. A la fin, nous écrivons simplement le token reçu dans une variable de session. Ce n’est pas une très bonne approche, il vaut mieux écrire directement dans la base de données, mais ce n’est pas le but de ce guide.

$client_secret — « Clé protégée» de votre application, cela ne fonctionnera pas sans :)

Nous avons maintenant tout prêt pour obtenir une liste d’utilisateurs d’une ville spécifique. L'algorithme de fonctionnement est très simple : créer une requête, l'exécuter, recevoir des données.

Nous formons :

Si (isset($_SESSION["token"])) ( $name = "Masha"; $url = $url = "https://api.vk.com/method/users.search?city_id=1&q=($ nom)&count=1000&access_token=($_SESSION["token"])" ; $res = file_get_contents($url); $users_data = json_decode($res,true); $users_count = array_shift($users_data["response"]) ; $users_list = $users_data["response"]; )

Cette demande nous ramènera 1000 utilisateurs de Moscou. En sortie, nous recevrons le nombre d'enregistrements concernés et un tableau associatif avec les utilisateurs enregistrés dans la variable $users_list, que nous pouvons utiliser à notre discrétion.

Le seul bémol est que l'API ne vous permet pas de sélectionner plus d'utilisateurs, même si vous utilisez le paramètre offset dans la chaîne de requête. Malheureusement, il s'agit d'une limitation de l'API VK.

Vous pouvez voir la liste complète des paramètres de l'API VK pour une requête dans

Les réseaux sociaux sont devenus un outil incontournable pour la promotion des sites Web. Promouvoir un site Web via les médias sociaux. Le réseau devrait créer un groupe ou une page pour ce site. Gagnez des abonnés, publiez des nouvelles sur le mur et bien plus encore (c'est un sujet pour une note séparée). Beaucoup de ces processus peuvent être automatisés à l’aide de l’API (interface de programmation d’application) du réseau social correspondant. Dans cet article, je vais expliquer comment se connecter à l'API VK (VKontakte), comment commencer à travailler avec l'API VK et donner également plusieurs exemples de travail avec l'API VKontakte.

Création d'une application VKontakte

Alors commençons. Vk api a de nombreuses méthodes, mais l'une de leurs principales différences est que pour envoyer des requêtes à Vk api via certaines méthodes, une clé d'accès spéciale est requise - un jeton (access_token). Vous pouvez l'obtenir en créant votre propre application. Plusieurs types d'applications nous sont proposés, mais je choisis le type Standalone. J'en ai assez. Pour commencer à créer l'application, suivez le lien et retrouvez-vous dans la fenêtre suivante.


Ici, nous sélectionnons le type et le nom de notre application. Nous cliquons sur connecter l'application et recevons un SMS avec un code au numéro de téléphone lié au compte VK à partir duquel nous créons l'application. Entrez-le et passez à la fenêtre suivante. Dans cette fenêtre, accédez à l'onglet Paramètres.


Dans l'onglet Paramètres, nous voyons des champs nommés ID d'application et clé de sécurité. Nous enregistrons ces données quelque part. Je n'ai rien fait d'autre dans les onglets. Le statut de la candidature a été laissé en position désactivée. Cliquez sur Enregistrer les paramètres. Ça y est, nous avons créé l'application VKontakte.

Réception d'un jeton (access_token) API VK

https://oauth.vk.com/authorize?client_id= &affichage= [vue de la fenêtre]&redirect_uri=https://oauth.vk.com/blank.html&scope= [autorisations d'application]&response_type=jeton&v=5.52

  • client_id - ID de notre application, obtenu précédemment.
  • affichage - le type de fenêtre dans laquelle l'autorisation aura lieu. Peut être une page, une popup, une touche et un wap
  • portée - les droits d'accès de notre application concernant les données utilisateur. En savoir plus sur les droits ci-dessous.

Les droits de l'application VK relatifs à un utilisateur donné peuvent être précisés sous forme textuelle et numérique. Dans le texte, cela ressemblera à ceci scope=friends,messages,groups . Avec cette ligne de code, nous avons autorisé l'application vk à accéder aux amis, aux messages et aux groupes de l'utilisateur. Les droits sont également fixés sous forme numérique. Chaque règle possède un masque de bits et la somme de ces masques et permettra à l'application d'effectuer certaines actions. Par exemple, la droite est amis(+2), messages(+4096), groupes(+262144), par conséquent, la somme des masques de bits sera 266242 et le code scope=266242 sera analogue à scope=friends , messages, groupes. Je voudrais accorder une attention particulière au droit au mode hors ligne. En définissant ce droit, le jeton que nous recevons est infini. Si ce droit n'est pas défini, après un certain temps, le jeton devra être à nouveau obtenu. Vous pouvez en savoir plus sur les droits d'application VK ici. En conséquence, créons une adresse pour que l'application reçoive un token avec des droits d'accès aux amis, messages et groupes de l'utilisateur, ainsi qu'un token immortel. Laissez l'ID de l'application être 123456. Cette adresse ressemblera à ceci :

https://oauth.vk.com/authorize?client_id=123456&display=page&redirect_uri=https://oauth.vk.com/blank.html& scope=friends,messages,groups,offline&response_type=token&v=5.52


Nous confirmons l'action et arrivons à une page avec un avertissement; nous récupérons notre jeton reçu dans la barre d'adresse du navigateur. Ce sera après #access_token= , le code expires_in=0 nous indique que le jeton (access_token) VK api est immortel. Par conséquent, user_id= est l'identifiant de l'utilisateur pour lequel nous avons reçu le jeton.

Allons dans les paramètres du compte dans l'onglet Paramètres de l'application et voyons notre application.


Nous sommes maintenant tous prêts à travailler avec l'API VKontakte.

Exemples de travail avec api vk

Pour travailler avec l'API VK, j'utilise le langage de programmation PHP. Par conséquent, je vais donner des exemples en PHP. Afin d'effectuer une action, nous devons envoyer une demande à api vk. Nous pouvons également envoyer une demande via la barre d'adresse du navigateur. Autrement dit, une requête est une URL spécifique contenant certains paramètres spécifiés. La syntaxe de création d'une telle URL est décrite ci-dessous.

Https://api.vkontakte.ru/ method/[MÉTHODE APPELÉE]?[PARAMÈTRES DE LA MÉTHODE APPELÉE]

La liste des méthodes api vk est ici, nous ne nous concentrerons pas davantage là-dessus pour l'instant, puis avec des exemples réels tout deviendra clair. Il ne reste plus qu'à comprendre comment envoyer une requête à l'API VKontakte en utilisant PHP. Pour ce faire, nous utiliserons la fonction php file_get_contents , ainsi que la fonction json_decode, puisque nous recevrons la réponse du serveur au format json. Voici un modèle pour exécuter une requête vers VK en PHP.

$result=json_decode(file_get_contents("https://api.vkontakte.ru/ method/[MÉTHODE APPELÉE]?[PARAMETRES DE MÉTHODE APPELÉE]"));

Eh bien, maintenant quelques exemples de travail avec l'API VK

$IDutilisateur=12345 ; $monjeton=56789 ; /*renverra un objet avec le sexe et la date d'anniversaire de l'utilisateur*/ $request_params = array("user_id" => $userid, "fields" => "sex", "fields" => "bdate"); $get_params = http_build_query($request_params); $result = json_decode(file_get_contents("https://api.vk.com/method/users.get?". $get_params)); /*vérification de l'interdiction VK de l'utilisateur*/ $request_params = array("user_id" => $user_id, "fields" => "deactivated"); $get_params = http_build_query($request_params); $result = json_decode(file_get_contents("https://api.vk.com/method/users.get?". $get_params)); if(isset($result->response->deactivated))( echo "Page gelée ou supprimée"; ) /*envoyer un message à l'utilisateur avec user_id=222222*/ $mesage="Bonjour, comment vas-tu ?"; //encode la chaîne $msg=urlencode($mesage); $result = json_decode(file_get_contents("https://api.vkontakte.ru/method/ messages.send?user_id=222222& message=".$msg."&access_token=".$mytoken)); /*Invitons l'utilisateur avec user_id=222222 comme ami*/ $mesage="Soyons amis"; $msg=urlencode($mesage); $result=json_decode(file_get_contents("https://api.vkontakte.ru/method/friends.adduser_id=222222& text=".$msg."&access_token=".$mytoken));

L'API dispose de nombreuses méthodes, je vous conseille donc de lire la documentation. Bien entendu, les requêtes ne sont pas toujours exécutées correctement et renvoient des codes d’erreur. Les erreurs peuvent être consultées ici. Donc juste comme ça, vous pouvez simplement vous connecter à l'api vk et automatiser vos actions en contact.

Commençons par les bases : qu’est-ce qu’une API ? L'abréviation signifie Application Programming Interface, ou interface pour la programmation d'applications. Le nom semble parler de lui-même, mais il vaut mieux envisager une explication plus détaillée.

Comme déjà mentionné, une API est avant tout une interface. Une interface qui permet aux développeurs d'utiliser des blocs prêts à l'emploi pour créer une application. Dans le cas du développement d'applications mobiles, une bibliothèque pour travailler avec une maison intelligente peut servir d'API - toutes les nuances sont implémentées dans la bibliothèque et vous n'accédez à cette API que dans votre code.

Dans le cas des applications Web, l'API peut renvoyer des données dans un format autre que le HTML standard, ce qui la rend pratique à utiliser lors de l'écriture de vos propres applications. Les API publiques tierces servent le plus souvent les données dans l'un des deux formats suivants : XML ou JSON. Si vous décidez de créer une API pour votre application, rappelez-vous que JSON est beaucoup plus concis et plus facile à lire que XML, et que les services qui donnent accès aux données au format XML abandonnent progressivement ce dernier.

API dans les applications Web avec des exemples

Une application - par exemple Github - possède sa propre API que d'autres développeurs peuvent utiliser. La manière dont ils l’utiliseront dépend des capacités offertes par l’API et de la capacité de l’imagination des développeurs. L'API GitHub permet par exemple d'obtenir des informations sur l'utilisateur, son avatar, ses lecteurs, ses référentiels et bien d'autres informations utiles et intéressantes.

De la même manière, vous pouvez envoyer une requête dans n’importe quelle langue, y compris Ruby. La réponse à la demande sera approximativement les informations suivantes :

( "login" : "Freika" , "id" : 3738638, "avatar_url" : "https://avatars.githubusercontent.com/u/3738638?v=3", "gravatar_id" : "" , "url" : "https://api.github.com/users/Freika", "html_url" : "https://github.com/Freika" , "followers_url" : "https://api.github.com/users/Freika/followers", "url_suivante" : "https://api.github.com/users/Freika/following(/other_user)", "essentiel_url" : "https://api.github.com/users/Freika/gists(/gist_id)", "url_étoile" : "https://api.github.com/users/Freika/starred(/owner)(/repo)", "abonnements_url" : "https://api.github.com/users/Freika/subscriptions", "organisations_url" : "https://api.github.com/users/Freika/orgs", "url_repos" : "https://api.github.com/users/Freika/repos", "url_événements" : "https://api.github.com/users/Freika/events(/privacy)", "reçu_events_url" : "https://api.github.com/users/Freika/received_events", "type" : "Utilisateur" , "site_admin" : false , "name" : "Evgeniy" , "company" : "" , "blog" : "http://frey.su/" , "location" : " Barnaul" , "email" : "" , "hireable" : true , "bio" : null, "public_repos" : 39, "public_gists" : 13, "followers" : 15, "following" : 21, "created_at" : "2013-03-01T13:48:52Z" , "updated_at" : "2014-12-15T13:55:03Z" )

Comme le montre le bloc ci-dessus, la réponse contient le login, l'avatar, le lien vers le profil sur le site et dans l'API, le statut de l'utilisateur, le nombre de référentiels publics et d'autres informations utiles et intéressantes.

L'API seule ne suffit pas

Créer une API complète pour votre application ne représente que la moitié de la bataille. Comment êtes-vous censé accéder à l’API ? Comment vos utilisateurs y accéderont-ils ?

La première chose qui vient à l’esprit est la série habituelle de requêtes HTTP pour obtenir les informations souhaitées, et ce n’est pas la bonne réponse. Dans ce cas, la méthode la plus évidente n’est pas la plus pratique ni la plus simple. Il serait beaucoup plus raisonnable de créer une bibliothèque spéciale pour travailler avec l'interface, qui décrira toutes les manières nécessaires pour recevoir et envoyer des informations à l'aide de l'API.

Utilisons encore une fois Github pour donner un exemple : pour travailler avec l'API de cet excellent service (et son interface offre des fonctionnalités étendues), plusieurs bibliothèques ont été créées dans différents langages, par exemple la gemme Octokit. Dans la documentation de ces bibliothèques (et la gemme donnée en exemple), tout développeur intéressé pourra trouver tous les moyens nécessaires pour recevoir des informations de Github et les renvoyer via l'API du service.

Ainsi, si vous créez votre propre API, envisagez peut-être de créer des bibliothèques pour l'utiliser dans les langages les plus courants. Et soyez prêt à ce qu'à un certain niveau de demande pour votre application, quelqu'un d'autre puisse créer sa propre bibliothèque pour travailler avec votre API. C'est bon.

Liens utiles

Dans les articles suivants, nous expliquerons comment créer correctement une API, assurer sa sécurité et limiter l'accès à certaines informations.

Avril 2018. J'avais 14 ans. Mes amis et moi avons joué au quiz en ligne alors très populaire « Clover » de VKontakte. L'un de nous (généralement moi) était toujours devant l'ordinateur portable pour essayer de poser rapidement des questions sur Google et d'utiliser nos yeux pour rechercher la bonne réponse dans les résultats de recherche. Mais soudain, j'ai réalisé que j'effectuais la même action à chaque fois, et j'ai décidé d'essayer de l'écrire en Python 3, que je connaissais partiellement à l'époque.

Étape 0. Que se passe-t-il ici

Tout d’abord, je vais vous rafraîchir la mémoire sur la mécanique de Clover.

Le jeu commence en même temps pour tout le monde - à 13h00 et 20h00, heure de Moscou. Pour jouer, vous devez vous rendre sur l'application à ce moment-là et vous connecter à la diffusion en direct. Le jeu dure 15 minutes, pendant lesquelles les participants appellent simultanément les questions arrivent. La réponse est donnée 10 secondes. Ensuite, la bonne réponse est annoncée. Tous ceux qui ont bien deviné passent à autre chose. Il y a 12 questions au total, et si vous répondez à toutes, vous recevrez un prix en espèces.

Il s'avère que notre tâche consiste à détecter instantanément les nouvelles questions du serveur Clover, à les traiter via un moteur de recherche et à déterminer la bonne réponse en fonction des résultats. Il a été décidé d'afficher la réponse dans un robot télégramme afin que les notifications de celui-ci apparaissent sur le téléphone pendant le jeu. Et tout cela est souhaitable en quelques secondes, car le temps de réponse est très limité. Si vous voulez voir comment un code assez simple mais fonctionnel (et il sera utile aux débutants de le regarder) nous a aidé à battre Clover, bienvenue chez le chat.