/// <summary> /// Опубликовываем запись на стене с картинкой альбома /// </summary> /// <param name="id">ID пользователя, где будем размещать запись</param> private void Share(int id) { string shareText = ReplaceKeyWords(Properties.Settings.Default.messageToPost); Console.WriteLine(shareText); _wallFactory = new WallFactory(_manager); // Инициализируем «фабрику» стены try { if (_coverArt) { _wallFactory = new WallFactory(_manager); _wallFactory.Manager.Method("photos.getWallUploadServer"); _wallFactory.Manager.Params("uid", id); XmlNode result = _wallFactory.Manager.Execute().GetResponseXml().LastChild; XmlUtils.UseNode(result); string uploadUrl = XmlUtils.String("upload_url"); HttpUploaderFactory uf = new HttpUploaderFactory(); NameValueCollection files = new NameValueCollection(); files.Add("photo", _imageDirectory); string resp = uf.Upload(uploadUrl, null, files); Console.WriteLine(resp); var apiResponse = JObject.Parse(resp); var server = (int)apiResponse["server"]; var photo = (string)apiResponse["photo"]; var hash = (string)apiResponse["hash"]; _wallFactory.Manager.Method("photos.saveWallPhoto"); _wallFactory.Manager.Params("server", server); _wallFactory.Manager.Params("photo", photo); _wallFactory.Manager.Params("hash", hash); XmlNode result2 = _wallFactory.Manager.Execute().GetResponseXml().FirstChild.FirstChild; XmlUtils.UseNode(result2); string photoId = XmlUtils.String("id"); Console.WriteLine(photoId); _wallFactory.Manager.Method("wall.post"); _wallFactory.Manager.Params("owner_id", id); _wallFactory.Manager.Params("message", shareText); _wallFactory.Manager.Params("attachments", photoId); _wallFactory.Manager.Params("uid", id); _wallFactory.Manager.Execute(); } else { _wallFactory = new WallFactory(_manager); // Инициализируем «фабрику» стены _wallFactory.Manager.Method("wall.post"); _wallFactory.Manager.Params("owner_id", id); _wallFactory.Manager.Params("message", shareText); Console.WriteLine(_wallFactory.Manager.Execute().ToString()); } AddLineToConsole("Опубликовано."); // Уведомляем пользователя об успешности } catch (ApiRequestErrorException apiRequestError) { AddLineToConsole(apiRequestError.Message + ". Сайт вернул неверный ответ. Попробуйте изменить текст для публикации."); } catch (Exception e) { AddLineToConsole(e.Message); } }
/// <summary> /// Опубликовываем запись на стене с картинкой альбома /// </summary> /// <param name="id">ID пользователя, где будем размещать запись</param> private void Share(int id) { iTunesApp app = new iTunesAppClass(); // И снова регистрируем iTunes, как класс приложения // Получаем нужную нам информацию о композиции string artist = app.CurrentTrack.Artist; string name = app.CurrentTrack.Name; string playlist = app.CurrentTrack.Playlist.Name; string album = app.CurrentTrack.Album; string genre = app.CurrentTrack.Genre; string prefix = _templatestatus; int count = app.CurrentTrack.PlayedCount; string shareText = Properties.Settings.Default.messageToPost; // Преобразуем ключевые слова shareText = shareText.Replace("{name}", name); shareText = shareText.Replace("{artist}", artist); shareText = shareText.Replace("{playlist}", playlist); shareText = shareText.Replace("{count}", count.ToString()); shareText = shareText.Replace("{album}", album); shareText = shareText.Replace("{genre}", genre); shareText = shareText.Replace("{prefix}", prefix); Console.WriteLine(shareText); _wallFactory = new WallFactory(_manager); // Инициализируем «фабрику» стены try { if (_coverArt) { _wallFactory = new WallFactory(_manager); // Инициализируем «фабрику» стены _wallFactory.Manager.Method("photos.getWallUploadServer"); _wallFactory.Manager.Params("uid", id); XmlNode result = _wallFactory.Manager.Execute().GetResponseXml(); XmlUtils.UseNode(result); string uploadUrl = XmlUtils.String("upload_url"); HttpUploaderFactory uf = new HttpUploaderFactory(); NameValueCollection files = new NameValueCollection(); files.Add("photo", _imageDirectory); string resp = uf.Upload(uploadUrl, null, files); Console.WriteLine(resp); var apiResponse = JObject.Parse(resp); string server = (string)apiResponse["server"]; string photo = (string)apiResponse["photo"]; string hash = (string)apiResponse["hash"]; _wallFactory.Manager.Method("photos.saveWallPhoto"); _wallFactory.Manager.Params("server", server); _wallFactory.Manager.Params("photo", photo); _wallFactory.Manager.Params("hash", hash); XmlNode result2 = _wallFactory.Manager.Execute().GetResponseXml().FirstChild; XmlUtils.UseNode(result2); string photoId = XmlUtils.String("id"); Console.WriteLine(photoId); _wallFactory.Manager.Method("wall.post"); _wallFactory.Manager.Params("owner_id", id); _wallFactory.Manager.Params("message", shareText); _wallFactory.Manager.Params("attachments", photoId); _wallFactory.Manager.Params("uid", id); _wallFactory.Manager.Execute(); } else { _wallFactory = new WallFactory(_manager); // Инициализируем «фабрику» стены _wallFactory.Manager.Method("wall.post"); _wallFactory.Manager.Params("owner_id", id); _wallFactory.Manager.Params("message", shareText); Console.WriteLine(_wallFactory.Manager.Execute().ToString()); } actionsStatus.Text = "Опубликовано."; // Уведомляем пользователя об успешности actionsStatusTimer.Enabled = true; // Включаем таймер, который каждые n-секунд сбрасывает специальной поле статуса действий } catch (FormatException) { actionsStatus.Text = "Введен некорректный ID."; actionsStatusTimer.Enabled = true; } catch (ApiRequestErrorException) { actionsStatus.Text = "Сайт вернул неверный ответ. Попробуйте изменить текст для публикации."; actionsStatusTimer.Enabled = true; } catch (Exception) { actionsStatus.Text = "Нет соединения с ВКонтакте. Проверьте работоспособность интернета."; actionsStatusTimer.Enabled = true; } }
// Выполняется при нажатии на кнопку «Порекомендовать» private void shareButton_Click(object sender, EventArgs e) { try { int id = int.Parse(idInput.Text); Share(id); } catch (FormatException) { try { _wallFactory = new WallFactory(_manager); _wallFactory.Manager.Method("getProfiles"); _wallFactory.Manager.Params("uids", idInput.Text); XmlNode result = _wallFactory.Manager.Execute().GetResponseXml().FirstChild; Console.WriteLine(result); XmlUtils.UseNode(result); int id = XmlUtils.Int("uid"); Console.WriteLine(id); Share(id); } catch (Exception) { actionsStatus.Text = "Введен некорректный ID, либо нет соединения с ВКонтакте."; actionsStatusTimer.Enabled = true; } } catch (ApiRequestErrorException) { actionsStatus.Text = "Сайт вернул неверный ответ. Попробуйте изменить текст для публикации."; actionsStatusTimer.Enabled = true; } catch (Exception) { actionsStatus.Text = "Нет соединения с ВКонтакте. Проверьте работоспособность интернета."; actionsStatusTimer.Enabled = true; } }
public void Auth() { //чтобы форма с авторизацией не фризила поток, а продолжала свою работу сразу после эвента //https://stackoverflow.com/questions/1916095/how-do-i-make-an-eventhandler-run-asynchronously //Task.Factory.FromAsync( // (asyncCallback, @object) => // { // var onConnecting = this.Connecting; // return onConnecting != null ? onConnecting.BeginInvoke(this, GetNetworkName(), asyncCallback, @object) : null; // }, // this.Connecting.EndInvoke, null); OnConnecting(); ShareDestionation = ShareDestinations.Messages; _sessionManager = new SessionManager(2369574, "status,wall,photos,audio,messages"); if (_needRelogin) { _sessionManager.ReLogin(); _isLogged = false; _needRelogin = false; } if (!_isLogged) { // Соединяемся с VK API, передаем ему ключ приложения и необходимые нам разрешения _sessionInfo = _sessionManager.GetOAuthSession(); if (_sessionInfo != null) { _isLogged = true; } Auth(); } // Выполняется если пользователь залогинен else { _manager = new ApiManager(_sessionInfo) { Timeout = 10000 }; _statusFactory = new StatusFactory(_manager); _friendsFactory = new FriendsFactory(_manager); _audioFactory = new AudioFactory(_manager); _messagesFactory = new MessagesFactory(_manager); _photosFactory = new PhotosFactory(_manager); _wallFactory = new WallFactory(_manager); OnConnected(_sessionInfo.UserId.ToString()); } }