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

csharp Неубывающаясуммаквадратов

csharp Узнаёмпортинстансадляподключениядебаггера