public async Task Send() { try { IList <SendingQuestion> questions = await _repository.GetQuestionForSend(); Dictionary <long, List <SendingQuestion> > qs = questions .GroupBy(x => x.QuestionId) .ToDictionary(k => k.Key, v => questions.Where(x => x.QuestionId == v.Key).ToList()); foreach (KeyValuePair <long, List <SendingQuestion> > pair in qs) { Thread.Sleep(3500); foreach (SendingQuestion q in pair.Value) { try { using (var client = new HttpClient()) { var values = new Dictionary <string, string> { { "type", "unicast" }, //type - тип запроса. Может быть:self - самому себе, broadcast - вещание по каналу, unicast - отправка одному пользователю { "id", AppSettingConfig.PushallId }, //id - номер вашей подписки в случае с self - ваш айди { "key", AppSettingConfig.PushallKey }, //key - ключ вашей подписки, или ключ безопасности для отправки Push себе { "uid", q.PushAllUserId }, //uid - ID пользователя { "title", q.ProviderDescription }, //title - заголовок Push-уведомления { "text", q.Title }, //text - основной текст Push-уведомления { "url", q.Url }, //url - адрес по которому будет осуществлен переход по клику (не обязательно) { "hidden", "0" }, //hidden - 1 - сразу скрыть уведомление из истории пользователей, 2 - скрыть только из ленты, 0 - не скрывать (по-умолчанию 0) { "encode", "utf8" }, //encode - ваша кодировка. (не обязательно) например cp1251 { "priority", "0" }, //priority - приоритет. 0 - по по-умолчанию. -1 - не важные, менее заметны. 1 - более заметные }; var content = new FormUrlEncodedContent(values); var response = await client.PostAsync("https://pushall.ru/api.php", content); var responseString = await response.Content.ReadAsStringAsync(); } } catch (Exception ex) { _errorProvider.SendError(ex); } } } } catch (Exception ex) { _errorProvider.SendError(ex); } }
public async void Start(string[] args) { List <Question> questions = new List <Question>(); while (true) { try { questions.AddRange(await _stackoverflowParse.ParseList()); var resultQuestions = await _repository.AddQuestions(questions); foreach (var q in resultQuestions) { q.Tags = questions.Single(x => x.Url == q.Url).Tags; } var tags = await _repository.UpdateTagsAndStatus(resultQuestions); if (resultQuestions.Any()) { await _pushAllProvider.Send(); } } catch (Exception ex) { _errorProvider.SendError(ex); } finally { questions.Clear(); Thread.Sleep(60 * 1000); } } }
public async void Start(string[] args) { List <Question> questions = new List <Question>(); while (true) { try { questions.AddRange(await _tosterParse.ParseList()); var resultQuestions = await _repository.AddQuestions(questions); await _tosterParse.ParseTags(resultQuestions); var tags = await _repository.UpdateTagsAndStatus(resultQuestions); if (tags.Any()) { Dictionary <string, string> tagUrls = new Dictionary <string, string>(); foreach (var pair in resultQuestions.Where(x => x.TagUrls != null).SelectMany(x => x.TagUrls)) { if (!tagUrls.ContainsKey(pair.Key)) { tagUrls[pair.Key] = pair.Value; } } foreach (var tag in tags) { tag.Url = tagUrls[tag.Name]; } await _tosterParse.ParseTagImage(tags); await _repository.UpdateTagImage(tags); } if (resultQuestions.Any()) { await _pushAllProvider.Send(); } } catch (Exception ex) { _errorProvider.SendError(ex); } finally { questions.Clear(); Thread.Sleep(60 * 1000); } } }