/// <summary> /// Return Full Text to Array KeyPhrases /// </summary> /// <returns></returns> public override string ToString() { string FullText = string.Empty; if (KeyPhrases.Count > 0) { FullText = string.Join(",", KeyPhrases.ToArray()); } return(FullText); }
public dynamic GetKeyPhrases(KeyPhrases objKeyPhrases) { //Busca as palavras chave de uma frase. Utilizado aqui, para análise dos sentimentos nos tweets do usuário var client = new HttpClient(); // Request headers client.DefaultRequestHeaders .Accept .Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "6b92be4a92be453dab8591fe28fb86af"); // Request parameters var uri = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases"; JavaScriptSerializer js = new JavaScriptSerializer(); string jsonKeyPhrases = JsonConvert.SerializeObject(objKeyPhrases); //byte[] byteData = Encoding.UTF8.GetBytes("{\"documents\": [{\"language\": \"en\",\"id\": \"1\",\"text\": \"" + text + "\"}]}"); byte[] byteData = Encoding.UTF8.GetBytes(jsonKeyPhrases); var textAnalytics = ""; HttpResponseMessage response; using (var content = new ByteArrayContent(byteData)) { content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); response = client.PostAsync(uri, content).Result; using (var stream = response.Content.ReadAsStreamAsync().Result) { using (var reader = new StreamReader(stream)) { textAnalytics = reader.ReadToEnd(); } } } dynamic textAnalyticsObj = new JavaScriptSerializer().DeserializeObject(textAnalytics); return(textAnalyticsObj); }
public async Task SetDiscoverSomethingTwitterAsync(TwitAuthenticateResponse twitAuthResponse, string screenName, long idMax, string idLogin) { var item = await DocumentDBRepository <Login> .GetItemAsync(idLogin); // Busca uma lista de tweets do usuário, neste caso os 100 primeiros. Após isso, é feito por thread, pegando os 100 tweets mais antigos que estes, e assim sucessivamente var timelineFormat = ""; var timelineUrl = ""; if (idMax > 0) { timelineFormat = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name={0}&max_id={1}&include_rts=0&exclude_replies=1&count=100"; timelineUrl = string.Format(timelineFormat, screenName, idMax); } else { timelineFormat = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name={0}&include_rts=0&exclude_replies=1&count=100"; timelineUrl = string.Format(timelineFormat, screenName); } HttpWebRequest timeLineRequest = (HttpWebRequest)WebRequest.Create(timelineUrl); var timelineHeaderFormat = "{0} {1}"; timeLineRequest.Headers.Add("Authorization", string.Format(timelineHeaderFormat, twitAuthResponse.TokenType, twitAuthResponse.AccessToken)); timeLineRequest.Method = "Get"; WebResponse timeLineResponse = timeLineRequest.GetResponse(); var timeLineJson = string.Empty; using (timeLineResponse) { using (var reader = new StreamReader(timeLineResponse.GetResponseStream())) { timeLineJson = reader.ReadToEnd(); } } dynamic tweets = new JavaScriptSerializer().DeserializeObject(timeLineJson); int count = 0; List <string> textTweets = new List <string>(); List <string> idTweets = new List <string>(); foreach (dynamic tweet in tweets) { //Joga todos os textos dos tweets dentro de uma lista, e os ids em outra textTweets.Add(tweet["text"]); long id = tweet["id"]; idTweets.Add(id.ToString()); count++; } //Busca token de acesso para API de Translate string authToken = await GetAccessTokenTranslateAsync(); //Chama API de Tradução, traduzindo o tweet de pt para en string[] translates = TranslateArray(authToken, "pt", "en", textTweets.ToArray()); string[] ids = idTweets.ToArray(); //Monta objeto para fazer a chamada da API de análise do texto do tweet KeyPhrases KeyPhrases = new KeyPhrases(); for (int i = 0; i < translates.Length; i++) { Document document = new Document(); document.Id = ids[i]; document.Language = "en"; document.Text = translates[i]; KeyPhrases.Documents.Add(document); } //Chama API de Análise de Texto, para buscar as palavras chave da frase tweetada dynamic keyPhrasesObj = GetKeyPhrases(KeyPhrases); List <string> keyPhrases = new List <string>(); foreach (var doc in keyPhrasesObj["documents"]) { //Coloca num stringão todas as palavras chaves separadas por ", " keyPhrases.Add(string.Join(", ", doc["keyPhrases"])); } //Busca token de acesso para API de Translate authToken = await GetAccessTokenTranslateAsync(); //Chama API de Tradução, agora traduzindo as palavras chave em en para pt para mostrar corretamente pro usuário string[] translateskeyPhrases = TranslateArray(authToken, "en", "pt", keyPhrases.ToArray()); for (int i = 0; i < translateskeyPhrases.Length; i++) { References reference = new References(); reference.IdTweet = ids[i]; //tweet.TextTweet = foreach (string keyPhraseTranslate in translateskeyPhrases[i].Split(new[] { ", " }, StringSplitOptions.None)) { //Verifica se já tem no objeto uma palavra chave com o mesmo texto if (item.KeyPhrases.Count(k => k.Text == keyPhraseTranslate) > 0) { //Se já existe, somente inclui uma nova referência item.KeyPhrases.FirstOrDefault(k => k.Text == keyPhraseTranslate).References.Add(reference); } else { //Caso não exista, cria uma nova KeyPhrase keyPhrase = new KeyPhrase(); keyPhrase.Text = keyPhraseTranslate; keyPhrase.References.Add(reference); item.KeyPhrases.Add(keyPhrase); } } } await DocumentDBRepository <Login> .UpdateItemAsync(idLogin, item); //ID do último tweet retornado, para consultar os mais antigos a partir desse, na próxima vez var lastTweet = tweets[count - 1]; long id_max = lastTweet["id"]; //Inicia thread para ir enchendo a base do usuário com mais tweets /*new Thread(async () => * { * await SetDiscoverSomethingTwitterAsync(twitAuthResponse, screenName, id_max - 1, idLogin); * }).Start();*/ }