Twitter fysiska klient (2 / 5 steg)
Steg 2: Börja med att bygga din java-program
Java kod går i frågor för retweets, anger en våning (för att undvika notering historiska retweets), och start från det golvet varje gång frågar det returnerar antalet retweets sedan förra frågan, detta är gjort med hjälp av ett index som blir inställda med varje fråga (snarare än spara den till disk eller DB).Jag bifoga koden, måste du ladda ner den och ändra följande klasser.
1. öppna projektet på netbeans.
2. se till att biblioteken "RXTXcomm.jar" och "twitter4j-core-2.2.2.jar" importeras, om de inte importera dem manuellt (du hittar dem i mappen lib).
3. Kontrollera port som din arduino är ansluten till, i mitt fall var det COM10 och så jag ändrade klass "serial_test" konstruktören att återspegla detta.
a. Öppna serial_test
b. gå till statiska portar array PORT_NAMES och ändra windows uppgiften för att matcha din (om du använder linux ändra värdet för linux).
4. öppen klass "arduino" och ändra ConsumerKey och ConsumerSecret för att matcha de du har från steg 1.
5. Rengör och sammanställa nu koden läses.
Kod förklaring
Byggt med Twitter4j kräver detta att du ska ringa klassen autentisera först, något utanför omfånget här men jag är villig att ge någon behövde hjälp vid behov
här är den metod som skördar antalet retweets.
offentliga ArrayList get_retweets_from_last (sträng-id)
{
Twitter twitter = nya TwitterFactory().getInstance();
ResponseList retweets = null;
ArrayList ret_retweets = ny ArrayList();
försök {
retweets=Twitter.getRetweetsOfMe();
för (Status s: retweets)
{
IF(s.getId() < =Long.parseLong(id))
bryta;
ret_retweets.Add(s);
}
System.out.println ("hittade" + ret_retweets.size() + "retweets");
} fånga (undantag e)
{e.printStackTrace();}
återvända ret_retweets;
}
Jag använd sedan RXTXcomm api för att överföra detta värde till Arduino, Arduino håller reda på hur många retweets mottog det eftersom det var lägga rätt, detta antal ökas varje gång den tar emot en ny från Java-program.
public void write (int s)
{
försök {
output.write(s);
} fånga (undantag e)
{
e.printStackTrace();
}
}
Slutligen hantera jag allt detta från en kontroll för loop med en tidsinställd fördröjning (anledningen här är att du bara få ett begränsat antal Twitter API samtal per timme, om du överstiger att du få blockerat),
While(true) try{Thread.Sleep(30000);} fånga (undantag e) {}
{
retweets=t.get_retweets_from_last(last_retweet);
retweets=t.get_mentions_from_last(last_retweet);
om (retweets.isEmpty())
{
try{Thread.Sleep(60000);} fånga (undantag e) {}
fortsätta;
}
last_retweet=""+retweets.get(0).getId();
St.write(retweets.Size());
}