vknet / vk Goto Github PK
View Code? Open in Web Editor NEWVkontakte API for .NET
Home Page: https://vknet.github.io/vk/
License: MIT License
Vkontakte API for .NET
Home Page: https://vknet.github.io/vk/
License: MIT License
Пытаюсь запостить фото в сообщество, на стену.
переменная _groupId - отрицательный ID группы.
ошибка возникает здесь -> var photo = api.Photo.SaveWallPhoto( // <- NullReferenceException //
...
public bool PostImage()
{
var imageFile = new DirectoryInfo("Images").GetFiles("*.jpg")[0];
var api = new VkApi();
var settings = Settings.All;
api.Authorize(Int32.Parse(_appId), _username, _password, settings);
var uploadServer = api.Photo.GetWallUploadServer(-long.Parse(_groupId));
var uploadServerUri = uploadServer.UploadUrl;
var uploader = new WebClient();
var uploadResponseInBytes = uploader.UploadFile(uploadServerUri, imageFile.FullName);
var uploadResponseInString = Encoding.UTF8.GetString(uploadResponseInBytes);
var jsonObject = (JObject)JsonConvert.DeserializeObject(uploadResponseInString);
var hashParameter = jsonObject["hash"].ToString();
var serverParameter = jsonObject["server"].ToString();
var photoParameter = jsonObject["photo"].ToString();
var photo = api.Photo.SaveWallPhoto( // <- NullReferenceException //
photoParameter,
uploadServer.UserId,
-long.Parse(_groupId),
long.Parse(serverParameter),
hashParameter);
var attachments = new List<MediaAttachment> {photo};
var result = api.Wall.Post(long.Parse(_groupId), false, true, "", attachments, null);
return true;
}
Ссылка на объект не указывает на экземпляр объекта.
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponse.cs:строка 75
в VkNet.Model.Attachments.Photo.FromJson(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Model\Attachments\Photo.cs:строка 144
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponseToModelCastsGenerator.cs:строка 291
в VkNet.Categories.PhotoCategory.SaveWallPhoto(String photo, Nullable1 userId, Nullable
1 groupId, Nullable`1 server, String hash) в d:\vs-projects\gt\vk\VkNet\Categories\PhotoCategory.cs:строка 398
в SocialCrossPoster.SocialPosters.VkontaktePoster.PostImage() в c:\Users\EatingPeopleIsFun\Documents\Visual Studio 2013\Projects\SocialCrossPoster\SocialCrossPoster\SocialPosters\VkontaktePoster.cs:строка 50
Подскажите, что делаю не так, или исправьте, пожалуйста.
Метод message.IsDeleted всегда возвращает null, независимо от того, удалено сообщение или нет
Если в списке полученных сообщений методом messages.getHistory, есть репост происходит:
Необработанное исключение типа "VkNet.Exception.InvalidParameterException" в VkNet.dll
Дополнительные сведения: The type 'wall' of attachment is not defined.
Стек вызовов:
VkNet.dll!VkNet.Model.Attachments.Attachment.FromJson(VkNet.Utils.VkResponse response = {VkNet.Utils.VkResponse}) Строка 190 C#
VkNet.dll!VkNet.Utils.VkResponse.implicit operator VkNet.Model.Attachments.Attachment(VkNet.Utils.VkResponse response = {VkNet.Utils.VkResponse}) Строка 39 + 0x2e байт C#
VkNet.dll!VkNet.Utils.VkResponse.op_Implicit.AnonymousMethod__6(VkNet.Utils.VkResponse a = {VkNet.Utils.VkResponse}) Строка 44 + 0x8 байт C#
Ответ VK такой:
response: {
count: 1940,
items: [{
id: **,
body: '',
user_id: *__,
from_id: *,
date: 1414993364,
read_state: 1,
out: 1,
attachments: [{
type: 'wall',
wall: {
id: ,
from_id: -,
to_id: -,
date: 1414992610,
post_type: 'post',
text: '',
attachments: [{
type: 'photo',
photo: {
id: *,
album_id: -7,
owner_id: -,
user_id: *,
photo_75: 'https://pp.vk.me/...b/uKU7pKtHLe0.jpg',
photo_130: 'https://pp.vk.me/...c/WZJpkmJWBto.jpg',
photo_604: 'https://pp.vk.me/...d/Kp44mAbDqSk.jpg',
width: 604,
height: 402,
text: '',
date: 1414992613,
post_id: *,
access_key: ''
}
}],
post_source: {
type: 'api'
},
comments: {
count: 0,
can_post: 0
},
likes: {
count: 9191,
user_likes: 1,
can_like: 0,
can_publish: 1
},
reposts: {
count: 953,
user_reposted: 0
}
}
}]
}]
}
Здравствуйте. Было бы хорошо добавить возможность получения token'a для последующих своих запросов.
Source https://vk.codeplex.com/discussions/561719#post1291841
Обновился, но по-прежнему выкидывает Exception на том же месте. Проверь еще разок, пожалуйста :)
A first chance exception of type 'System.NullReferenceException' occurred in VkNet.dll
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponse.cs:строка 75
в VkNet.Model.Attachments.Photo.FromJson(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Model\Attachments\Photo.cs:строка 144
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponseToModelCastsGenerator.cs:строка 291
в VkNet.Categories.PhotoCategory.SaveWallPhoto(String photo, Nullable1 userId, Nullable1 groupId, Nullable`1 server, String hash) в d:\vs-projects\gt\vk\VkNet\Categories\PhotoCategory.cs:строка 398
в SocialCrossPoster.Model.SocialPosters.VkontaktePoster.Post(SocialMessage message) в c:\Users\EatingPeopleIsFun\Documents\Visual Studio 2013\Projects\SocialCrossPoster\SocialCrossPoster\Model\SocialPosters\VkontaktePoster.cs:строка 94
Т.к. многопоточность сейчас не реализована перевести библиотеку на версию 3.5.
Для эмуляции использовать Task.Run(...).
обновил сегодня библиотеку, перестали получаться пользователи, так как возвращает устаревший ответ без ["items"]
добавил parameters.Add("v", "5.24"); в
[Pure]
[ApiVersion("5.24")]
public ReadOnlyCollection Get(long uid, ProfileFields fields = null, int? count = null, int? offset = null, FriendsOrder order = null, NameCase nameCase = null, int? listId = null)
{
...
}
и всё заработало. ну умаю понятно изложил.
var api = new VkApi();
api.Authorize(4521225, login, pwd, Settings.All);
NameValueCollection nvc = new NameValueCollection();
Dictionary<string, string> response = new Dictionary<string, string>();
using (WebClient client = new WebClient())
{
byte[] responseByte = client.UploadFile(api.Photo.GetWallUploadServer(api.UserId).UploadUrl, @"D:\1.png");
string s = client.Encoding.GetString(responseByte);
response = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string,string>>(s);
}
var photo = api.Photo.SaveWallPhoto(response["photo"],api.UserId,null, int.Parse(response["server"]), response["hash"]);
ответ invalid hash!!!!!!!!!
Source discussion https://vk.codeplex.com/discussions/562100
Разработать систему которая будет разбирать капчу по ее изображению.
Не хватает полей при возврате функции Photo.Search, таких как lat, long, http://vk.com/dev/photos.search. Возможно добавить?
Антон, свяжись со мной в ВК пожалуйста. Id:52158932
Согласно vk api (https://vk.com/dev/messages.get) там используется last_message_id, а у вас почему-то дата последнего сообщения и что-то не работает оно
От пользователя Б было переслано сообщение пользователя В пользователю А, сообщение это было из скрытой стены пользователя В. Так вот в таком случаи вылазит Необработанное исключение типа "VkNet.Exception.InvalidParameterException" в VkNet.dll
Метод Message.Get
var user = vk.Users.Get(@"hzzzarium", ProfileFields.All);
long userID = user.Id;
var lsW = vk.Wall.Get(userID, out cou, 1, 0, WallFilter.Owner);
var user3=vk.Users.Get(@"svetka_v_baletkah", ProfileFields.All)
var lsW1 = vk.Wall.Get(user3.ID, out cou, 1, 0, WallFilter.Owner);
оба обращения выдают исключение
"Ссылка на объект не указывает на экземпляр объекта."
т.е.сейчас просто не удается получить вообще никакие записи со стены((
VkNet 1.0.4 установил NuGet-ом
Простите великодушно меня бестолкового - что я делаю не так????
Windows 7. VS 2012. NET Framework 4.5 (до 4.5.1 не обновлял пока)
Спасибо.
Не устанавливается vknet в vs 2010 - asp.net 4.0 в web site
Пробовал отдельно, сначала, установить зависимости, а потом уже vknet
Почему-то удаляется...
PM> install-package vknet
Установка "VkNet 1.0.9".
"VkNet 1.0.9" успешно установлен.
Добавление "VkNet 1.0.9" в WebSite1.
Удаление "VkNet 1.0.9".
"VkNet 1.0.9" успешно удален.
Не удалось выполнить установку. Идет откат...
install-package : Не удалось установить пакет "VkNet 1.0.9". Вы пытаетесь установить этот пакет в проект, требуемая версия платформы которого — ".NETFramework,Version=v4.0", но в пакете нет ссылок на сборки или файлов
содержимого, совместимых с этой платформой. Дополнительные сведения можно получить у автора пакета.
строка:1 знак:1
- CategoryInfo : NotSpecified: (:) [Install-Package], InvalidOperationException
- FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand
PM>
Если в посте есть голосование получаем NullReferenceException
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response)
в VkNet.Model.Poll.FromJson(VkResponse response)
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response)
в VkNet.Model.Attachment.FromJson(VkResponse response)
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response)
в VkNet.Utils.VkResponse.<op_Implicit>b__2(VkResponse r)
в System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() в System.Linq.Enumerable.WhereEnumerableIterator
1.MoveNext()
в System.Collections.Generic.List1..ctor(IEnumerable
1 collection)
в VkNet.Utils.VkResponseEx.ToCollection[T](IEnumerable1 source) в VkNet.Utils.VkResponseEx.ToCollectionOf[T](VkResponse response, Func
2 selector)
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response)
в VkNet.Model.Post.FromJson(VkResponse response)
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response)
в VkNet.Categories.WallCategory.b__1(VkResponse r)
в System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() в System.Collections.Generic.List
1..ctor(IEnumerable1 collection) в VkNet.Utils.VkResponseEx.ToReadOnlyCollection[T](IEnumerable
1 source)
в VkNet.Utils.VkResponseEx.ToReadOnlyCollectionOf[T](IEnumerable1 responses, Func
2 selector)
в VkNet.Categories.WallCategory.Get(Int64 ownerId, Int32& totalCount, Nullable1 count, Nullable
1 offset, WallFilter filter)
From: Cepega
Использую метод поиска:
var query = "Василий Иванов"; //пример
var users = vk.Users.Search(query, out count, fields);
Вываливается Exception:
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponse.cs:строка 75
в VkNet.Model.Relative.FromJson(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Model\Relative.cs:строка 32
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponseToModelCastsGenerator.cs:строка 381
в VkNet.Utils.VkResponse.<op_Implicit>b__52(VkResponse a) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponseToModelCastsGenerator.cs:строка 386
в System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() в System.Linq.Enumerable.WhereEnumerableIterator
1.MoveNext()
в System.Collections.Generic.List1..ctor(IEnumerable
1 collection)
в VkNet.Utils.VkResponseEx.ToCollection[T](IEnumerable1 source) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponseEx.cs:строка 12 в VkNet.Utils.VkResponseEx.ToCollectionOf[T](VkResponse response, Func
2 selector) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponseEx.cs:строка 24
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponseToModelCastsGenerator.cs:строка 386
в VkNet.Model.User.FromJson(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Model\User.cs:строка 362
в VkNet.Utils.VkResponse.op_Implicit(VkResponse response) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponseToModelCastsGenerator.cs:строка 480
в VkNet.Categories.UsersCategory.b__1(VkResponse r) в d:\vs-projects\gt\vk\VkNet\Categories\UsersCategory.cs:строка 59
в System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() в System.Collections.Generic.List
1..ctor(IEnumerable1 collection) в VkNet.Utils.VkResponseEx.ToReadOnlyCollection[T](IEnumerable
1 source) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponseEx.cs:строка 38
в VkNet.Utils.VkResponseEx.ToReadOnlyCollectionOf[T](IEnumerable1 responses, Func
2 selector) в d:\vs-projects\gt\vk\VkNet\Utils\VkResponseEx.cs:строка 59
в VkNet.Categories.UsersCategory.Search(String query, Int32& itemsCount, ProfileFields fields, Int32 count, Int32 offset) в d:\vs-projects\gt\vk\VkNet\Categories\UsersCategory.cs:строка 59
Read the full discussion online.
Начал работать с библиотекой, и по умолчанию метод получения сообщений возвращает в старом формате, и не работает.
[ApiVersion("5.21")]
public ReadOnlyCollection Get( ....
и строка " totalCount = response["count"];" валится, так как в json нету такого атрибута(старый формат), ну я заметил что, в атрибуте указана версия Api, ну и написал в методе кол, проверку этого аттрибута
в методе
VkResponse response = _vk.Call("messages.get", parameters);
вот такую штучку дописал (проверяю вызывающий метод и его версию апи)
"var stackTrace = new StackTrace();
MethodBase methodBase = stackTrace.GetFrame(1).GetMethod();
var attributes = methodBase.GetCustomAttributes(typeof(ApiVersionAttribute), true);
if (attributes.Length > 0)
{
var version = ((ApiVersionAttribute)attributes[0]).Version;
parameters.Add("v", version);
}"
Нужно получить список польщователей онлайн, а тут такая ошибка. Подскажите, что делать?
Messages.GetDialogs должен возвращать массив со всеми диалогами. Сейчас возвращает список диалогов с одним конкретно заданным пользователем, что само по себе, абсурд.
Original source: http://vk.codeplex.com/workitem/37
Добавить метод проверки диапазона
Добрый день. Не дам я вам отдохнуть((
var user = vk.Users.Get(@"hzzzarium", ProfileFields.All);
long userID = user.Id;
var lsW = vk.Wall.Get(userID, out cou, 50, 50, WallFilter.Owner);
Я для краткости убрал try-catch
выдает исключение
"Ссылка на объект не указывает на экземпляр объекта." (System.NullReferenceException)
op_Implicit VkResponse.sc str 77
1-е 50 сообщений получил нормально
var user3 = vk.Users.Get(@"svetka_v_baletkah", ProfileFields.All)
var lsW = vk.Wall.Get(user3.ID, out cou, 50, 200, WallFilter.Owner);
исключение Can not convert Null to Int64.
200 1-х отработали нормально
У некоторых удается полностью получить сообщения без ошибок.
С уважением
Смысл данной функции в том, что бы пользователь мог обратиться к любой апи функции, которой ещё нет в проекте. Например так vkApi.SendApi(methodName, parametrs) при этом пользователь сам должен написать обертку для данного метода, исключающего всякого рода ошибки.
В песледней версии не могу даже авторизоваться.
vk = new VkApi();
vk.Authorize(appId, mail, pass, VkNet.Enums.Filters.Settings.Friends | VkNet.Enums.Filters.Settings.Messages);
"An unhandled exception of type 'System.IO.FileNotFoundException' occurred in VkNet.dll
Additional information: Could not load file or assembly 'HtmlAgilityPack, Version=1.4.6.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a' or one of its dependencies. The system cannot find the file specified."
Здравствуйте. У вас реализована функция GetUploadServer(), но нет SaveAudio(), без нее нет смысла получать ссылку на сервер загрузки аудио, в VK API предусмотрена функция сохранения аудио после загрузки на сервер.
Собственно проблема выше. Может я что-то не так делаю. Но возвращает null
VkResponseArray response = _vk.Call("wall.getComments", parameters);
totalCount = response[0];
следует заменить на response.Count
return response.Skip(1).ToReadOnlyCollectionOf(c => c);
почему тут Skip(1) ?
Можно ли послать сообщение в группу, или это ещё не реализовано?
Если в сообщении есть смайлы, то метод body возвращает текст сообщения, НО на месте смайлов оказываются квадратики. Как бы эта функция должна возвращать ТОЛЬКО текст сообщения, а она пытается отдать что-то ещё!
Или я сам чего-то не понимаю?
Заменить значения параметров доступа в VkNet.Enums.Settings на оригинальные из https://vk.com/dev/permissions, поскольку некоторые методы возвращают права в виде битовой маски (пример: https://vk.com/dev/account.getAppPermissions).
From: gmb_oner
При вызове
var col = api.Messages.Get(MessageType.Received, out value, 5);
выдает данную ошибку:
Не удалось привести тип объекта "Newtonsoft.Json.Linq.JValue" к типу "Newtonsoft.Json.Linq.JArray".
Source discussion http://vk.codeplex.com/discussions/543017
А должен учитываться так же, как и в методе Call.
Еще раз приветствую. Специально в методе GetAlbums выбрасывается исключение что отрицательное значение owner_id, на самом деле оно допускается VK API и оно нужно чтобы иметь доступ к списку альбомов группе.
Если передать методу photos.getAlbums (https://vk.com/dev/photos.getAlbums) параметры
needCovers: true и photoSizes: true
то нужно дополнительно возвратить массив из json-объекта "sizes".
То же самое касается метода photos.get и, видимо, остальных методов, работающих с фото.
Путь решения:
Я это решил путем модификации исходного кода. Было бы здорово включить в следующий релиз. Если нужен код, предоставлю, он несложный.
System.NullReferenceException при попытке получить данные от пользователя, у которого последнее (для GetDialogs) и какое-либо из получаемых (для Messages.Get) сообщение/ий содержит в себе изображение.
Original source: http://vk.codeplex.com/workitem/36
При попытке парсинга системного альбома исключение Can not convert Object to String.
Причина:
нужно поправить настройки приватности (https://vk.com/dev/privacy_setting)
для полей album.PrivacyView и CommentPrivacy. Там возвраащется объект, а не строка.
Кстати, вместо comment_privacy должен быть privacy_comment
Еще раз здравствуйте. Вызов того метода почему-то выбрасывает исключение, все у себя в программе перепроверил, и переменную самого API.
Ошибка при попытке парсинга.
Причина проблемы: не стоит атрибут ApiVersion у метода GetExtended класса WallCategory. Из-за этого возвращается json-объект "wall" вместо объекта "items".
При установке [ApiVersion("5.9")] у меня все заработало.
При вызове метода
int count = -2;
VkErrors.ThrowIfNumberIsNegative(() => count);
Исключение не выбрасывается.
Хранить рядом с каждым методом совместимую версию API (атрибуты, комментарии, xml, etc.).
Кроме того, в каждом методе в VkParameters добавлять подходящую версию апи, а дефолтную убрать в принципе. Если версия не передана в параметрах, бросать исключение или контролировать аннотациями. Тогда методы не будут падать при выходе новой версии, а просто будут иметь старый интерфейс.
Еще, как вариант, при обновлении методов до новой версии сохранять старую с атрибутом Obsolete для совместимости с существующим кодом, а полностью удалять по прошествии какого-то времени.
public bool Delete(long ownerId, long postId)
{
var parameters = new VkParameters
{
{ "owner_id", ownerId },
{ "post_id", postId }
};
return _vk.Call("wall.delete", parameters);
}
Проверить и перевести все методы на использование новой версии api.
From: alxrt
Доброго времени суток.
Когда можно ожидать поддержки функционала из раздела photos?
Read the full discussion online http://vk.codeplex.com/discussions/545188#post1244769
Airat952: "Здравствуйте, я учу Xamarin for Android, и Ваша библиотека была бы очень полезна. Будет ли поддержка мобильных приложений через Xamarin? Или все же придется искать другую библиотеку?"
Source discussion https://vk.codeplex.com/discussions/543712
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.