Volevo Twitter tweet dell'utente per l'analisi dei dati. Per questo ho usato il pacchetto HtmlAgilityPack per raschiare Twitter e mi dà 30 top tweet.
Ho riconosciuto l'elemento tweet-text e ho recuperato tutti i tweet. Ma voglio identificare se è tweet o retweet. Come lo posso fare?
Ho analizzato HTML. Nel retweet ci sarà un elemento con tweet-context with-icn
class. Ma quando scrivo tweet su quella classe, genera un'eccezione nulla, perché non tutti i tweet avranno quella classe. Quindi in base a cosa e come posso rasentare per sapere se è retweet o no?
Codice:
HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("https://twitter.com/BarackObama");
var TweetsNode= doc.DocumentNode.SelectNodes("//tr[@class='tweet-container']").ToList();
foreach (var item in TweetsNode)
{
var tweet = new Tweets
{
console.WriteLine(item.innertext);
};
}
Nel codice precedente, ho provato a recuperare i tweet del profilo di Barack Obama. Sto ricevendo i primi 30 tweet. Come posso riconoscere qual è il retweet?
Grazie.
Ottieni tutti i tweet da una pagina (che è utile nelle tabelle <table class='tweet '>
)
HtmlWeb p = new HtmlWeb();
var doc = p.Load(@"https://twitter.com/dailygametips");
var nodes = doc.DocumentNode.SelectNodes("//table[@class='tweet ']");
Cerca nei nodi per <span class='context'>
per indicare che questo tweet è un retweet.
List<Tweet> tweets = new List<Tweet>();
foreach (var node in nodes)
{
bool isRetweet = false;
var spanNode = node.SelectSingleNode(".//span[@class='context']");
if (spanNode != null && spanNode.InnerHtml.Contains("retweeted"))
{
isRetweet = true;
}
Vogliamo anche il testo del messaggio, quindi scaricalo subito dopo <div class='tweet-text'>
:
string msg = string.Empty;
var msgNode = node.SelectSingleNode(".//div[@class='tweet-text']");
if (msgNode != null)
{
msg = msgNode.InnerText.Trim();
}
tweets.Add(new Tweet(msg, isRetweet));
}
Aggiunta della classe contenitore Tweet:
class Tweet
{
public Tweet(string message, bool isRetweet)
{
Message = message;
IsRetweet = isRetweet;
}
string Message { get; private set; }
bool IsRetweet { get; private set; }
}
Come dici tu, questa non è una vera scienza missilistica. Ma è necessario comprendere i principi di base di XPath e Scraping.