Procédures stockées: description, limites et exemples

image

Dans cet article, je parlerai des procédures stockées. Comment les utiliser et pourquoi, limites, exemples de procédures intéressantes que j'utilise.

Les procédures stockées vous permettent d'exécuter du code côté serveur de l'API de la même manière que la méthode d'exécution, mais sans passer le code de procédure sur le réseau.
Une procédure stockée est un algorithme prédéterminé qui vous permet de mettre en œuvre un appel rapide à plusieurs méthodes API à la fois, similaire au principe de la méthode d'exécution, mais sans transmettre de code sur le réseau (dans la demande, vous devez spécifier uniquement le nom de la procédure et les paramètres nécessaires).

Vous pouvez créer de nouvelles procédures stockées sur l'onglet correspondant dans la section d'édition de votre application.
Le code des procédures stockées est écrit dans le langage VKScript.

image
VKScript pour la méthode d' exécution n'est pas toujours petit, et le transmettre dans la requête est très gras. De plus, pour les procédures stockées, un client pratique est implémenté directement dans Vkontakte. Tirez la procédure par son nom, dans ce cas, vous n'avez plus besoin de passer de code . Sans utiliser de procédures stockées lors de l'envoi de demandes du client, votre code envoyé à l'API peut être consulté.
En envoyant du code du navigateur à l'API, tout le monde peut le voir. Lors de l'envoi uniquement du nom de la procédure stockée et des paramètres, le code ne sera pas disponible.

Limites

Max demandes par seconde3
Max taille de la réponse5 Mo
Max nombre d'appels dans la procédure aux méthodes API25
Max nombre d'opérations dans la procédure1000


Mes procédures


  • Recherche intelligente de personnes sans date de naissance ni ville exacte. Peu importe la ville ou la date de naissance spécifiée dans le profil de l'utilisateur.
    execute.userSearch
    • Étape 1
      1. Nom, date de naissance, ville. Selon ces champs, nous recherchons des correspondances parmi les comptes Vkontakte qui ont des photos. Si nous trouvons 2 comptes ou plus, nous utilisons celui avec la dernière date de connexion maximum. Si rien n'est trouvé, passez à l'étape 2.

    • Étape 2
      1. En utilisant des données par nom et prénom, date de naissance, nous effectuons une nouvelle recherche.
        Si nous trouvons 2 comptes ou plus, passez à l'étape 3.2. Si rien n'est trouvé, passez à l'étape 3.3.

    • Étape 3
      1. Nous recherchons les 10 groupes les plus populaires de la ville sélectionnée de Vkontakte.
      2. Dans ces groupes, nous recherchons FI, date de naissance, pays Russie, il y a une photo. Si quelque chose est trouvé, enregistrez le résultat actuel, sinon passez à l'étape 3.3.
      3. Nous recherchons des groupes par FI, pays Russie, il y a une photo. Si quelque chose est trouvé, nous enregistrons le résultat, sinon il est "vide".

    var name = Args.fullname; var birth_day = Args.birth_day; var birth_month = Args.birth_month; var birth_year = Args.birth_year; var city = Args.city; var fields = "photo_id, sex, bdate, city, country, home_town, photo_max_orig, contacts, site, education, universities, schools, status, last_seen, followers_count, common_count, occupation, nickname, relatives, relation, personal, connections, exports, activities, interests, music, movies, tv, books, games, about, quotes, can_post, can_see_all_posts, can_see_audio, can_write_private_message, can_send_friend_request, is_favorite, is_hidden_from_feed, timezone, screen_name, maiden_name, career, military"; var countGroups = 10; var res = []; var item = {}; var city_id = 0; if (city != "") { city_id = API.database.getCities({"q": city, "country_id": 1}).items@.id[0]; } if (birth_day != "" && city_id > 0) { item = API.users.search({ "q": name, "country":1, "city": city_id, "has_photo":1, "fields": fields, "birth_day": birth_day, "birth_month": birth_month, "birth_year": birth_year }).items; var i = 0; while (i < item.length) { var item_ = item[i]; item_.criterion = " , , "; item_.step = "1.1"; res.push(item_); i = i +1; } } else { countGroups = countGroups + 1; } if (item.length > 0) { return res; } if (birth_day != "") { item = API.users.search({ "q": name, "country": 1, "has_photo": 1, "fields": fields, "birth_day": birth_day, "birth_month": birth_month, "birth_year": birth_year }).items; var i = 0; while (i < item.length) { var item_ = item[i]; item_.criterion = " , "; item_.step = "2.1"; res.push(item_); i = i +1; } } if (item.length > 0) { return res; } if (city.length > 0) { var groupsIDs = API.groups.search({ "q": city, "sort": 6, "type": "page", "count": countGroups }).items@.id; var count = 0; while (count < groupsIDs.length) { var item2 = {}; if (birth_day != "") { item2 = API.users.search({ "q": name, "country":1, "has_photo":1, "fields": fields, "birth_day": birth_day, "birth_month": birth_month, "birth_year": birth_year, "group_id": groupsIDs[count] }).items; } if (item2.length > 0) { var i = 0; while (i < item2.length) { var item_ = item2[i]; item_.criterion = " , ,    "; item_.step = "3.2"; item_.groupID = groupsIDs[count]; res.push(item_); i = i +1; } } else { item2 = API.users.search({ "q": name, "country":1, "has_photo":1, "fields": fields, "count": 5, "group_id": groupsIDs[count] }).items; var i = 0; while (i < item2.length) { var item_ = item2[i]; item_.criterion = ",    "; item_.step = "3.3"; item_.groupID = groupsIDs[count]; res.push(item_); i = i +1; } } count = count + 1; } } return res; 


  • Obtenir une liste des dates de naissance des amis utilisateurs - J'ai utilisé cette méthode pour déterminer l'âge approximatif d'une personne.
    execute.getFriendsBDates
     var response = ""; var bdates = API.friends.get({"user_id": Args.user_id, "fields": "bdate", "v": "5.103"}).items@.bdate; response = response + bdates; if (!bdates.length || bdates[0].length == 5000) { response = response + API.friends.get({"user_id": Args.user_id, "fields": "bdate", "offset": "5000", "v": "5.103"}).items@.bdate; } return response; 


  • Obtenez une liste des membres de la communauté.
    execute.getMembers
     var members = API.groups.getMembers({"group_id": Args.group_id, "v": "5.27", "sort": "id_asc", "count": "1000", "offset": Args.offset}).items; //       var offset = 1000; //      while (offset < 25000 && (offset + Args.offset) < Args.total_count) //    20000       { members = members + "," + API.groups.getMembers({"group_id": Args.group_id, "v": "5.27", "sort": "id_asc", "count": "1000", "offset": (Args.offset + offset)}).items; //    offset +   offset = offset + 1000; //    1000 }; return members; 


  • Obtenez une liste d'amis d'utilisateurs.
    execute.getFriends
     var user_ids = Args.user_ids.split(','); var friends = API.friends.get({"user_id": user_ids[0], "v": "5.27", "sort": "id_asc", "count": "10000"}).items; var i = 1; while (user_ids.length > i && i < 25) { friends = friends + "," + API.friends.get({"user_id": user_ids[i], "v": "5.27", "sort": "id_asc", "count": "10000"}).items; i = i + 1; } return friends; 


  • Recherchez des personnes dans les communautés à la demande, par exemple, si les utilisateurs sont membres de groupes appelés «Films en ligne».
    execute.isMemberGroups
     var groups = API.groups.search({"q": Args.q, "v": "5.27", "offset": Args.offset, "count": "24"}).items; var members = []; var i = 0; while (groups.length > i) { var groupIsMember = []; groupIsMember.members = API.groups.isMember({"group_id": groups[i].id, "user_ids": Args.user_ids, "v": "5.27"}); groupIsMember.group_id = groups[i].id; members.push(groupIsMember); i = i + 1; } return members; 


Source: https://habr.com/ru/post/fr475302/


All Articles