Procedimientos almacenados: descripción, límites y ejemplos

imagen

En este artículo hablaré sobre los procedimientos almacenados. Cómo usarlos y por qué, límites, ejemplos de procedimientos geniales que uso.

Los procedimientos almacenados le permiten ejecutar código en el lado del servidor de la API de manera similar al método de ejecución, pero sin transmitir el código de procedimiento a través de la red.
Un procedimiento almacenado es un algoritmo predeterminado que le permite implementar una llamada rápida a varios métodos API a la vez, similar al principio del método de ejecución, pero sin transmitir el código a través de la red (en la solicitud debe especificar solo el nombre del procedimiento y los parámetros necesarios).

Puede crear nuevos procedimientos almacenados en la pestaña correspondiente en la sección de edición de su aplicación.
El código para los procedimientos almacenados está escrito en el lenguaje VKScript.

imagen
VKScript para el método de ejecución no siempre es pequeño, y pasarlo en la solicitud es muy audaz. Además, para los procedimientos almacenados, se implementa un cliente conveniente directamente en Vkontakte. Tire del procedimiento por su nombre, en este caso, ya no necesita pasar el código . Sin utilizar procedimientos almacenados al enviar solicitudes desde el cliente, se puede ver su código enviado a la API.
Al enviar código desde el navegador a la API, cualquiera puede verlo. Al enviar solo el nombre del procedimiento almacenado y los parámetros, el código no estará disponible.

Límites

Max solicitudes por segundo3
Max tamaño de respuesta5 MB
Max Número de llamadas dentro del procedimiento a métodos API25
Max Número de operaciones dentro del procedimiento1000


Mis procedimientos


  • Una búsqueda inteligente de personas sin fecha de nacimiento y ciudad exacta; no importa qué ciudad o fecha de nacimiento se especifique en el perfil del usuario.
    execute.userSearch
    • Paso 1
      1. Nombre, fecha de nacimiento, ciudad. Según estos campos, estamos buscando coincidencias entre las cuentas de Vkontakte que tienen fotos. En caso de que encontremos 2 o más cuentas, usaremos una con la última fecha de inicio de sesión máxima. Si no se encuentra nada, vaya al Paso 2.

    • Paso 2
      1. Usando datos por apellido y nombre, fecha de nacimiento, buscamos nuevamente.
        Si encontramos 2 o más cuentas, vaya al Paso 3.2. Si no se encuentra nada, vaya al Paso 3.3.

    • Paso 3
      1. Estamos buscando los 10 grupos más populares de la ciudad seleccionada de Vkontakte.
      2. En estos grupos estamos buscando FI, fecha de nacimiento, país Rusia, hay una foto. Si se encuentra algo, guarde el resultado actual; de lo contrario, vaya al paso 3.3.
      3. Estamos buscando grupos por FI, país Rusia, hay una foto. Si se encuentra algo, guardamos el resultado, de lo contrario está "vacío".

    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; 


  • Obtenga una lista de las fechas de nacimiento de los usuarios amigos. Utilicé este método para determinar la edad aproximada de una persona.
    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; 


  • Obtenga una lista de miembros de la comunidad.
    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; 


  • Obtenga una lista de amigos de los usuarios.
    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; 


  • Busque personas en comunidades bajo demanda, por ejemplo, si los usuarios son miembros de grupos llamados "Películas en línea".
    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/475302/


All Articles