В настоящее время я использую твиттерную библиотеку tweeinvi для фильтрации твитов. У меня есть основная форма, которая создает, который создает экземпляр класса TwitterAuthentication. При создании конструктор обрабатывает процесс аутентификации. Затем из главной формы я создаю фильтр для слова hello и пытаюсь вернуть любые совпадения из этого отфильтрованного потока обратно в основную форму для входа в простое текстовое окно.
Итак, основные биты формы -
private void authenticate(object sender, EventArgs e)
{
TwitterAuthentication user = new TwitterAuthentication();
twitter_user.Text = user.username();
string UserTxt = user.ToString();
user.set_filter(log_output_update);
}
public void log_output_update(string s) //int y)
{
{
string z = "[def]";
//if (y == 0) { z = "[SYS] "; }
//if (y == 1) { z = "[IN] "; }
//if (y == 2) { z = "[OUT] "; }
//if (y == 3) { z = "[**ERROR**] It may be Phils Coding! Error - "; }
string time = System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
//if (y == 0) { log_output_window.SelectionColor = Color.White; }
//if (y == 1) { log_output_window.SelectionColor = Color.Blue; }
//if (y == 2) { log_output_window.SelectionColor = Color.Green; }
//if (y == 3) { log_output_window.SelectionColor = Color.Red; }
log_output_window.AppendText(z + time + " " + s + System.Environment.NewLine);
log_output_window.ScrollToCaret();
}
}
и полный класс (я пропустил учетные данные с помощью x) -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Diagnostics;
using System.Windows.Forms;
using Tweetinvi;
using Tweetinvi.Models;
using System.Drawing;
public class TwitterAuthentication
{
public delegate void Callback_Log_Tweet(string x);
public TwitterAuthentication()
{
IAuthenticationContext _authContext;
var appCredentials = new TwitterCredentials("x", "x");
_authContext = AuthFlow.InitAuthentication(appCredentials);
using (var client = new WebClient())
{
try
{
using (var Stream = client.OpenRead("http://www.google.com"))
{
Process.Start(_authContext.AuthorizationURL);
//open pin box and enter pin
SocialiFace_v2.PinAuth Pin = new SocialiFace_v2.PinAuth();
Pin.ShowDialog();
System.Console.WriteLine(Pin.Pin_Auth);
var userCredentials = AuthFlow.CreateCredentialsFromVerifierCode(Pin.Pin_Auth, _authContext);
Auth.SetCredentials(userCredentials);
try
{
var authenticateduser = User.GetAuthenticatedUser();
return;
}
catch (Tweetinvi.Exceptions.TwitterNullCredentialsException)
{
MessageBox.Show("Error Authenticating");
return;
}
}
//Callback_Log_Tweet("Logged In...."");
}
catch (Exception)
{
MessageBox.Show("Error Authenticating2");
return;
}
}
}
public string username()
{
try
{
var authenticateduser = User.GetAuthenticatedUser();
string handle = authenticateduser.Name;
return handle;
}
catch (Exception)
{
MessageBox.Show("Error getting username");
return null;
}
}
public void set_filter(Callback_Log_Tweet x)
{
var stream = Stream.CreateFilteredStream();
stream.AddTrack("Hello");
stream.MatchingTweetReceived += (sender, args) =>
{
//Send back to delgate, and to print output delegate
x("A tweet containing 'Hello' has been found; the tweet is '" + args.Tweet + "'");
};
}
Любая помощь при передаче этого возврата будет будь великолепен! Кроме того, если я хочу, чтобы из класса передавался любой стандартный текст вне метода set_filter, как бы этого достичь?
заранее спасибо!