存储过程:说明,限制和示例

图片

在本文中,我将讨论存储过程。 如何使用它们以及为什么限制我使用的酷程序示例。

存储过程使您可以类似于execute方法,在API的服务器端执行代码,但无需通过网络传输过程代码。
存储过程是一种预先确定的算法,可让您立即执行对多个API方法的快速调用,类似于execute方法的原理,但无需通过网络传输代码(在请求中,您必须仅指定过程名称和必要的参数)。

您可以在应用程序的编辑部分的相应选项卡上创建新的存储过程。
存储过程的代码用VKScript语言编写。

图片
execute方法的VKScript并不总是很小,并且在请求中传递它非常大胆。 此外,对于存储过程,可以在Vkontakte中直接实现方便的客户端。 按其名称拉动过程,在这种情况下,您不再需要传递代码 。 在从客户端发送请求时,如果不使用存储过程,则可以查看发送到API的代码。
通过将代码从浏览器发送到API,任何人都可以查看它。 仅发送存储过程和参数的名称时,该代码将不可用。

限度

最高 每秒请求3
最高 回应大小5兆字节
最高 过程中对API方法的调用次数25
最高 程序中的操作数1000


我的程序


  • 精明的人搜索,没有出生日期和确切的城市-用户个人资料中指定哪个城市或出生日期都没有关系。
    execute.userSearch
    • 第一步
      1. 姓名,出生日期,城市。 根据这些字段,我们正在寻找具有照片的Vkontakte帐​​户之间的匹配项。 如果发现2个或更多帐户,我们将使用最近登录日期最长的一个。 如果未找到任何内容,请转到步骤2。

    • 第二步
      1. 我们使用姓,名,出生日期等数据进行重新搜索。
        如果我们找到2个或更多帐户,请转到步骤3.2。 如果未找到任何内容,请转到步骤3.3。

    • 第三步
      1. 我们正在寻找所选城市弗孔塔克特的10个最受欢迎的群体。
      2. 在这些组中,我们正在寻找FI,出生日期,国家(地区)俄罗斯,有照片。 如果找到内容,则保存当前结果,否则转到步骤3.3。
      3. 我们正在按国家(俄罗斯)的FI寻找团体,有照片。 如果找到了某些内容,我们将保存结果,否则为“空”。

    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; 


  • 获取用户朋友的生日列表-我使用这种方法来确定一个人的大概年龄。
    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; 


  • 获取社区成员列表。
    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; 


  • 获取用户的朋友列表。
    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; 


  • 根据需要搜索社区中的人员,例如,用户是否是称为“在线电影”的组的成员。
    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/zh-CN475302/


All Articles