csharp РаботаемсAPIvk.com
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp РаботаемсAPIvk.com相关的知识,希望对你有一定的参考价值。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using VkNet;
using VkNet.Enums.Filters;
namespace ZennoLab.OwnCode
{
/// <summary>
/// A simple class of the common code
/// </summary>
public class CommonCode
{
/// <summary>
/// Lock this object to mark part of code for single thread execution
/// </summary>
public static object SyncObject = new object();
// Insert your code here
}
}
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using VkNet;
using VkNet.Enums.Filters;
bool blnShowDataToLog = Convert.ToBoolean(project.Variables["bln_show_data_to_log"].Value);
int intUsersPerStep = Convert.ToInt32(project.Variables["cfg_group_users_per_step"].Value);
int intMaxUsers = Convert.ToInt32(project.Variables["cfg_max_users"].Value);
//параметры, применяемые при формировании запроса
string strGroupID = project.Variables["cfg_group_id"].Value; //id группы для парсинга участников (демонстрирую на группе https://vk.com/dont_eat)
string strDirection = "id_asc"; //Возможные значения: id_asc, id_desc, time_asc, time_desc (последние два требуют прав модератора сообщества)
string strDataFields = "sex,bdate,city,country,online,last_seen";
/*-------------------ТЕСТИРУЕМЫЙ КОД - НИЖЕ-------------------*/
bool blnShowDataToLog = Convert.ToBoolean(project.Variables["bln_show_data_to_log"].Value);
int intUsersPerStep = Convert.ToInt32(project.Variables["cfg_group_users_per_step"].Value);
int intMaxUsers = Convert.ToInt32(project.Variables["cfg_max_users"].Value);
//параметры, применяемые при формировании запроса
string strGroupID = project.Variables["cfg_group_id"].Value; //id группы для парсинга участников (демонстрирую на группе https://vk.com/dont_eat)
string strAccessToken = project.Variables["cfg_access_token"].Value;
string strDirection = "id_asc"; //Возможные значения: id_asc, id_desc, time_asc, time_desc (последние два требуют прав модератора сообщества)
string strDataFields = "bdate,city,country,online,last_seen";
string strSex="1"; //1 - женский, 2 - мужской
string strAgeFrom = "32";
string strAgeTo = "99";
string strBirthMonth = "12";
int intOffset=0;
int intMembersCount = 0;
int intUsersParsed = 0;
while(true) {
//формируем строку API-запроса
string strQuery = String.Format("https://api.vk.com/method/users.search?count={0}&offset={1}&fields={2}&sex={3}&age_from={4}&age_to={5}&birth_month={6}&online=1&group_id={7}&access_token={8}&v=5.60",
intUsersPerStep, intOffset, strDataFields, strSex, strAgeFrom, strAgeTo, strBirthMonth, strGroupID, strAccessToken);
string strAPIResponse = ZennoPoster.HttpGet(strQuery, "", "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
AdditionalHeaders: new [] {"Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"}); //Обратите внимание на дополнительный заголовок (Accept-Language), который передаю. Иначе "умный API" будет отдавать данные транслитом
//Создаём объект Json и грузим в него контент, формируем множество узлов (токенов) с заданным именем
JObject objParsedJson = JObject.Parse(strAPIResponse);
//Выводим в лог общее количество участников группы (однократно)
if (intMembersCount==0) {
intMembersCount = (int)objParsedJson.SelectToken("response.count");
project.SendWarningToLog("Количество участников группы: " + intMembersCount, true);
}
//Формируем семейство "участников" из json
IEnumerable<JToken> userTokens = objParsedJson.SelectTokens("response.items[*]", false);
project.SendWarningToLog(String.Format("Начальная позиция: {0}, запрошены данные по: {1}, пользователей в ответе на запрос: {2}", intOffset, intUsersPerStep, userTokens.Count()), true);
if (userTokens.Count()==0) {
project.SendWarningToLog("Парсинг участников группы завершён", true);
break;
}
//Перебираем множество токенов members
foreach (JToken userToken in userTokens) {
string strId = (string)userToken.SelectToken("id");
string strFirstName = (string)userToken.SelectToken("first_name");
string strLastName = (string)userToken.SelectToken("last_name");
string strBirthDay = (string)userToken.SelectToken("bdate");
//string strCountryId = (string)userToken.SelectToken("country.id");
string strCountryName = (string)userToken.SelectToken("country.title");
//string strCityId = (string)userToken.SelectToken("city.id");
string strCityName = (string)userToken.SelectToken("city.title");
string strDeactivated = (string)userToken.SelectToken("deactivated") ?? String.Empty;
string strOnline = (string)userToken.SelectToken("online");
string strLastSeen = (string)userToken.SelectToken("last_seen.time") ?? String.Empty;
string strLastSeenDT = String.Empty;
if (strLastSeen!=String.Empty) strLastSeenDT = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Convert.ToInt32(strLastSeen)).ToString("dd.MM.yyy hh:mm");
string strLastPlatform = (string)userToken.SelectToken("last_seen.platform");
project.SendInfoToLog(string.Format("Найден пользователь {0}: {1} {2}, день рождения {3}", strId, strFirstName, strLastName, strBirthDay!=null ? strBirthDay : "скрыт (можно выпарсить иначе)"));
if (intMaxUsers>0&&++intUsersParsed>intMaxUsers) {
project.SendInfoToLog ("Распарсено максимальное количество пользователей", true);
break;
}
}
if (intMaxUsers>0&&intUsersParsed>intMaxUsers) break;
intOffset = intOffset + intUsersPerStep;
}
IZennoTable tblResult = project.Tables["tbl_result"];
tblResult.Clear();
bool blnShowDataToLog = Convert.ToBoolean(project.Variables["bln_show_data_to_log"].Value);
int intUsersPerStep = Convert.ToInt32(project.Variables["cfg_group_users_per_step"].Value);
int intMaxUsers = Convert.ToInt32(project.Variables["cfg_max_users"].Value);
//параметры, применяемые при формировании запроса
string strGroupID = project.Variables["cfg_group_id"].Value; //id группы для парсинга участников (демонстрирую на группе https://vk.com/dont_eat)
string strDirection = "id_asc"; //Возможные значения: id_asc, id_desc, time_asc, time_desc (последние два требуют прав модератора сообщества)
string strDataFields = "sex,bdate,city,country,online,last_seen";
int intOffset=0;
int intMembersCount = 0;
int intUsersParsed = 0;
while(true) {
//формируем строку API-запроса
string strQuery = String.Format("https://api.vk.com/method/groups.getMembers?group_id={0}&sort={1}&offset={2}&count={3}&fields={4}&v=5.60",
strGroupID, strDirection, intOffset, intUsersPerStep, strDataFields);
string strAPIResponse = ZennoPoster.HttpGet(strQuery, "", "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
AdditionalHeaders: new [] {"Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"}); //Обратите внимание на дополнительный заголовок (Accept-Language), который передаю. Иначе "умный API" будет отдавать данные транслитом
//Создаём объект Json и грузим в него контент, формируем множество узлов (токенов) с заданным именем
JObject objParsedJson = JObject.Parse(strAPIResponse);
//Выводим в лог общее количество участников группы (однократно)
if (intMembersCount==0) {
intMembersCount = (int)objParsedJson.SelectToken("response.count");
project.SendWarningToLog("Количество участников группы: " + intMembersCount, true);
}
//Формируем семейство "участников" из json
IEnumerable<JToken> userTokens = objParsedJson.SelectTokens("response.items[*]", false);
project.SendWarningToLog(String.Format("Начальная позиция: {0}, запрошены данные по: {1}, пользователей в ответе на запрос: {2}", intOffset, intUsersPerStep, userTokens.Count()), true);
if (userTokens.Count()==0) {
project.SendWarningToLog("Парсинг участников группы завершён", true);
break;
}
//Перебираем множество токенов members
foreach (JToken userToken in userTokens) {
string strId = (string)userToken.SelectToken("id");
string strFirstName = (string)userToken.SelectToken("first_name");
string strLastName = (string)userToken.SelectToken("last_name");
string strGender = (string)userToken.SelectToken("sex");
string strBirthDay = (string)userToken.SelectToken("bdate");
//string strCountryId = (string)userToken.SelectToken("country.id");
string strCountryName = (string)userToken.SelectToken("country.title");
//string strCityId = (string)userToken.SelectToken("city.id");
string strCityName = (string)userToken.SelectToken("city.title");
string strDeactivated = (string)userToken.SelectToken("deactivated") ?? String.Empty;
string strOnline = (string)userToken.SelectToken("online");
string strLastSeen = (string)userToken.SelectToken("last_seen.time") ?? String.Empty;
string strLastSeenDT = String.Empty;
if (strLastSeen!=String.Empty) strLastSeenDT = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Convert.ToInt32(strLastSeen)).ToString("dd.MM.yyy hh:mm");
string strLastPlatform = (string)userToken.SelectToken("last_seen.platform");
if (blnShowDataToLog) project.SendInfoToLog(string.Format("{0} - {1} {2}", strId, strFirstName, strLastName));
tblResult.AddRow(new String[]{strId, strFirstName, strLastName, strBirthDay, strGender, strCountryName, strCityName, strDeactivated, strOnline, strLastSeenDT, strLastPlatform});
if (intMaxUsers>0&&++intUsersParsed>intMaxUsers) {
project.SendInfoToLog ("Распарсено максимальное количество пользователей", true);
break;
}
}
if (intMaxUsers>0&&intUsersParsed>intMaxUsers) break;
intOffset = intOffset + intUsersPerStep;
}
以上是关于csharp РаботаемсAPIvk.com的主要内容,如果未能解决你的问题,请参考以下文章
csharp Работастабами,переборизакрытиененужных
csharp Мини-справочникпоработесдатами
csharp Поставитькурсорвполеinputвконецтекста,которыйтамуженабран
csharp Берём/Удаляемстрокуиз.txt