Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
foreach со вложенным if вместо Where/Select — это тошнотворно, конечно.получить все сообщения с пользователем, обработать узлы xml
while(true)
{
var doc = XDocument.Load("https://api.vk.com/method/messages.getHistory.xml?uid=12345&offset=" + m + "&count="+n+"&access_token=" + token);// Загружаем наш xml с сервера и начнем обработку
foreach (var el in doc.Root.Elements("message"))// Раскрываем корневой узел
{
foreach (var el_msg in el.Elements("attachment"))// Теперь в узле message
{
foreach (var el_attch in el_msg.Elements("photo"))
{
foreach (var el_photo in el_attch.Elements("src_xbig"))
{
// Скачиваем фотографию в img/
src_client.DownloadFile(el_photo.Value, "img/img" + k + ".jpg");
k++;
}
}
}
}
// Ну и конечно увеличение параметра count
m += n;
}
while (true)
{
var doc = XDocument.Load("https://api.vk.com/method/messages.getHistory.xml?uid=12345&offset=" + m + "&count=" + n + "&access_token=" + token);// Загружаем наш xml с сервера и начнем обработку
var photoElements=
doc.Root.Elements("message")
.SelectMany(el => el.Elements("attachment")
.SelectMany(el_msg => el_msg.Elements("photo")
.SelectMany(elAttch => elAttch.Elements("src_xbig"))));
foreach (var el_photo in photoElements)
{
// Скачиваем фотографию в img/
src_client.DownloadFile(el_photo.Value, "img/img" + k + ".jpg");
k++;
}
// Ну и конечно увеличение параметра count
m += n;
}
using System;
using System.Linq;
using System.Net;
using System.Xml.Linq;
using System.Xml.XPath;
namespace Test
{
class Program
{
private readonly WebClient _webClient = new WebClient();
public string Token
{
get { return "token"; }
}
public string UserID
{
get { return "uid"; }
}
public string XQueryString
{
get { return "//message//attachment//photo//src_big"; }
}
static void Main()
{
new Program().Run();
}
private void Run()
{
const int offset = 0, count = 10;
var url = MakeUrl(UserID, offset, count, Token);
var doc = XDocument.Load(url);
var els = doc.XPathSelectElements(XQueryString);
foreach (var t in els.Select((val, index) => new { val.Value, Index = index }))
{
_webClient.DownloadFileAsync(new Uri(t.Value), string.Format("img/img{0}.jpg", t.Index));
}
}
private string MakeUrl(string uid, int offset, int count, string token)
{
const string queryFormatString =
"https://api.vk.com/method/messages.getHistory.xml?uid={0}&offset={1}&count={2}&access_token={3}";
return string.Format(queryFormatString, uid, offset, count, token);
}
}
}
API ВКонтакте и XDocument для самых маленьких