Procedimentos armazenados: descrição, limites e exemplos

imagem

Neste artigo, falarei sobre procedimentos armazenados. Como usá-los e por que, limites, exemplos de procedimentos legais que eu uso.

Os procedimentos armazenados permitem executar o código no lado do servidor da API da mesma maneira que o método execute, mas sem passar o código do procedimento pela rede.
Um procedimento armazenado é um algoritmo predeterminado que permite implementar uma chamada rápida para vários métodos de API de uma só vez, semelhante ao princípio do método execute, mas sem transmitir código pela rede (na solicitação, você deve especificar apenas o nome do procedimento e os parâmetros necessários).

Você pode criar novos procedimentos armazenados na guia correspondente na seção de edição do seu aplicativo.
O código para procedimentos armazenados é escrito na linguagem VKScript.

imagem
O VKScript para o método execute nem sempre é pequeno, e passá-lo na solicitação é muito ousado. Além disso, para procedimentos armazenados, um cliente conveniente é implementado diretamente no Vkontakte. Puxe o procedimento pelo nome; nesse caso, você não precisa mais passar o código . Sem usar procedimentos armazenados ao enviar solicitações do cliente, seu código enviado à API pode ser exibido.
Ao enviar o código do navegador para a API, qualquer pessoa pode visualizá-lo. Ao enviar apenas o nome do procedimento e dos parâmetros armazenados, o código não estará disponível.

Limites

Máx. pedidos por segundo3
Máx. tamanho da resposta5 MB
Máx. número de chamadas dentro do procedimento para métodos de API25
Máx. número de operações dentro do procedimento1000


Meus procedimentos


  • Uma pesquisa inteligente por pessoas sem data de nascimento e cidade exata - não importa qual cidade ou data de nascimento seja especificada no perfil do usuário.
    execute.userSearch
    • Etapa 1
      1. Nome, data de nascimento, cidade. De acordo com esses campos, estamos procurando correspondências entre as contas do Vkontakte que têm fotos. No caso de encontrarmos 2 ou mais contas, usamos aquela com a última data de login máxima. Se nada for encontrado, vá para a Etapa 2.

    • Etapa 2
      1. Usando dados por sobrenome e nome, data de nascimento, pesquisamos novamente.
        Se encontrarmos duas ou mais contas, vá para a Etapa 3.2. Se nada for encontrado, vá para a Etapa 3.3.

    • Etapa 3
      1. Estamos procurando os 10 grupos mais populares da cidade selecionada de Vkontakte.
      2. Nesses grupos, estamos procurando FI, data de nascimento, país Rússia, há uma foto. Se algo for encontrado, salve o resultado atual; caso contrário, vá para a etapa 3.3.
      3. Estamos à procura de grupos por FI, país Rússia, há uma foto. Se algo for encontrado, salvamos o resultado, caso contrário, ele estará "vazio".

    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; 


  • Obtenha uma lista das datas de nascimento dos amigos dos usuários - usei esse método para determinar a idade aproximada de uma pessoa.
    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; 


  • Obtenha uma lista de membros da comunidade.
    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; 


  • Obtenha uma lista de amigos de usuários.
    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; 


  • Procure pessoas em comunidades sob demanda, por exemplo, se os usuários são membros de grupos chamados "Filmes on-line".
    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/pt475302/


All Articles