Pages: 1 [2]   Go Down
Author Topic: Twitter Client=> naar eigen account veranderen [OPGELOST!]  (Read 5167 times)
0 Members and 1 Guest are viewing this topic.
Forum Moderator
Hamme, Belgium
Offline Offline
Sr. Member
*****
Karma: 4
Posts: 387
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Ik vind dat beter dan een vermelding.

ik vind alle twee nog beter  smiley-grin
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Blijkbaar heb ik iets te vroeg gejuigd. Mijn nieuwe tweets leest hij niet (meer) in. Ik ga de code hier nog eens onder zetten, heb enkel maar de a-check er in gezet. Dit om het overzichtelijk te houden.
Code:
#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>


// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x07, 0x00, 0x2B };
byte ip[] =  { 10,25,32,90}; //change this
byte subnet[] = {255,255,0,0}; //change this
byte gateway[] = {10,25,255,254}; //change this
byte dns[] = {10,56,1,1}; //change this
EthernetClient client;
String TwitterName ="jariboe"; //change this to your own twittername, or follow me ;-)
char tweet[140];
String SearchString ="<title>";
byte charsize;
char serverName[] = "api.twitter.com";  // twitter URL
int leD1 = 8;                
int leD2 = 7;
int leD3 = 6;
int leD4 = 5;

void setup() {
  pinMode(leD1, OUTPUT);
  pinMode(leD2, OUTPUT);
  pinMode(leD3, OUTPUT);
  pinMode(leD4, OUTPUT);
  // initialize serial:
  Serial.begin(9600);
  // attempt a DHCP connection:
  Ethernet.begin(mac, ip, dns, gateway, subnet);
  // connect to Twitter:
  delay(3000);
}

void loop(){
  
  Serial.println("connecting to server...");
  if (client.connect(serverName, 80)) {
    TextFinder  finder( client,2 );
    Serial.println("making HTTP request...");
    // make HTTP GET request to twitter:
    client.print("GET /1/statuses/user_timeline.rss?screen_name=");
    client.print(TwitterName);
    client.println("&count=1 HTTP/1.1");
    client.println("HOST: api.twitter.com");
    client.println();
    Serial.println("sended HTTP request...");
    memset (tweet,0x03,sizeof(tweet)); //we vullen de tweet met ETX (End of Text)
    while (client.connected()) {
      if (client.available()) {
        Serial.println("looking for tweet...");
        SearchString = SearchString + TwitterName + ": ";
        charsize = SearchString.length() + 1;
        char StartHere[charsize];
        char EndHere[] = "</title>";
        SearchString.toCharArray(StartHere,charsize);
        if((finder.find("<item>")&&(finder.getString(StartHere,EndHere,tweet,140)!=0)))
          Serial.println(tweet);
        break;
      }
      
      
    }
    delay(1);
    client.stop();
  }
  Serial.println("start de verwerking ...");
  if (tweet[0] != 0x03) { //als het eerste karakter in de char tweet niet gelijk is aan 0x03, dan staat er dus iets anders bv a of b of q
      for (byte i = 0; i <140; i++){ // we zoeken de a op alle 140 plaatsen
        if (tweet[i] == 'a' ){
          Serial.print("a verwerkt! op plaats: ");
          Serial.println(i); // laat ons zien op welke plaats je een a vond. want mogelijks is dat niet op de eerste plaats in de tweet
                             digitalWrite (leD1, HIGH);        //led 1 aan
                             delay (1000);                     // laatste actie aanhouden
                             digitalWrite (leD1, LOW);         //led 1 uit en naar de volgende
                             delay (100);
                              digitalWrite (leD1, HIGH);        //led 1 aan
                             delay (1000);                     // laatste actie aanhouden
                             digitalWrite (leD1, LOW);         //led 1 uit en naar de volgende
                             delay (100);
                              digitalWrite (leD3, HIGH);        //led 1 aan
                             delay (1000);                     // laatste actie aanhouden
                             digitalWrite (leD3 , LOW);         //led 1 uit en naar de volgende
                             delay (100);
        }
        if (tweet[i] == 'b' ){
          Serial.print("b verwerkt! op plaats: ");
          Serial.println(i); // index b printen
        }
      }
      
    }
  Serial.println("delay...");
  delay (60000);
  // don't make this less than 30000 (30 secs), because you can't connect to the twitter servers faster (you'll be banned)
  // off course it would be better to use the "Blink without delay", but I leave that to you.
}

Met de Tweet: Allez Hupla (was goed om ook de hoofdletters te checken)
Quote
connecting to server...
making HTTP request...
sended HTTP request...
looking for tweet...
Allez Hupla
start de verwerking ...
a verwerkt! op plaats: 10
delay...
connecting to server...
making HTTP request...
sended HTTP request...
looking for tweet...
start de verwerking ...
delay...
Filmpje komt er zeker aan als ik mijn nieuwe camera heb, pas na de examens.
« Last Edit: May 21, 2012, 08:37:16 am by KINGsize » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En blijkbaar leest hij ze wel altijd opnieuw in als ik de serial montior opnieuw open.
Zelfs met een lege sketch of niet de originele sketch.

Raar, vre raar  smiley-confuse
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1920
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ik weet niet hoe het tweet verhaal in elkaar zit maar wel hoe je moet programmeren.
Hieronder de stukjes code van jou waar ik 2 problemen zie:

Code:
...
String SearchString ="<title>";
...

void loop(){
 
  if (client.connect(serverName, 80)) {
...
    while (client.connected()) {
      if (client.available()) {
        Serial.println("looking for tweet...");
        SearchString = SearchString + TwitterName + ": ";
...
        break;
      }
     
     
    }
    delay(1);
    client.stop();
  }
  Serial.println("start de verwerking ...");
...     
    }
  Serial.println("delay...");
  delay (60000);
  // don't make this less than 30000 (30 secs), because you can't connect to the twitter servers faster (you'll be banned)
  // off course it would be better to use the "Blink without delay", but I leave that to you.
}
SearchString  is gedefineerd al een globale variabele met als waarde "<title>".
Als je dan schrijft SearchString = SearchString + TwitterName + ": ";
krijg je de eeste keer SearchString = "<title>"+ TwitterName + ": ";
de 2 de keer krijg je SearchString = "<title>"+ TwitterName + ": "+ TwitterName + ": ";
de 3 de keer  krijg je SearchString = "<title>"+ TwitterName + ": "+ TwitterName + ": " + TwitterName + ": ";
en zo door.
Niet alleen is de string verkeerd maar je gaat ook je geheugen opgebruiken met als gevolg dat Arduino 'raar' gaat doen.
Verhuis StringSearchString = "<title>"+ TwitterName + ": "; naar de setup functie en opgelost.
De Serial monitor opstarten reset de arduino. Daarom ook dat na het opstarten van de serial monitor je sketch weer voor 1 maal werkt.

Het nut van de break ontgaat me.
Waarom niet gewoon een functie schrijven voor de verwerking? Je vervangt de break dan door de functie aan te roepen.
Dan hoef je niet steeds weer de client te stoppen en starten en een connectie maken.

Met vriendelijke groet
Jan

Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Forum Moderator
Hamme, Belgium
Offline Offline
Sr. Member
*****
Karma: 4
Posts: 387
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@jantje,

De break komt uit mijn code en de reden was dat in mijn origineel er nog heel wat andere dingen gebeuren via ethernet. Er werd ook een webpage getoond. Dus de ethernet server en cliënt wisselen elkaar af in mijn originele code. Ook deed ik zelf maar een check om de 10 minuten, dus sloot ik de cliënt telkens af.

over de SearchString.

Het zou eigenlijk nog simpeler zijn moest je die gewoon weglaten. Want mijn code was bedoeld om eenvoudig je twitternaam te kunnen aanpassen. Hier mag je dat allemaal weglaten en gewoon zoeken op het volgende:

Code:
if((finder.find("<item>")&&(finder.getString("<title>twittername: ","</title>",tweet,140)!=0)))

en je kan nog heel wat andere strings en chars weglaten.
dat wordt dan:

Code:
#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>


// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x07, 0x00, 0x2B };
byte ip[] =  { 10,25,32,90}; //change this
byte subnet[] = {255,255,0,0}; //change this
byte gateway[] = {10,25,255,254}; //change this
byte dns[] = {10,56,1,1}; //change this
EthernetClient client;
char tweet[140];
int leD1 = 8;               
int leD2 = 7;
int leD3 = 6;
int leD4 = 5;

void setup() {
  pinMode(leD1, OUTPUT);
  pinMode(leD2, OUTPUT);
  pinMode(leD3, OUTPUT);
  pinMode(leD4, OUTPUT);
  // initialize serial:
  Serial.begin(9600);
  // attempt a DHCP connection:
  Ethernet.begin(mac, ip, dns, gateway, subnet);
  // connect to Twitter:
  delay(3000);
}

void loop(){
 
  Serial.println("connecting to server...");
  if (client.connect( "api.twitter.com", 80)) { //twitter url
    TextFinder  finder( client,2 ); // 2 seconds to wait for output
    Serial.println("making HTTP request...");
    // make HTTP GET request to twitter:
    client.print("GET /1/statuses/user_timeline.rss?screen_name=jariboe"); //twittername to look for
    client.println("&count=1 HTTP/1.1");
    client.println("HOST: api.twitter.com"); //twitter url
    client.println();
    Serial.println("sended HTTP request...");
    memset (tweet,0x03,sizeof(tweet)); //we vullen de tweet met ETX (End of Text)
    while (client.connected()) {
      if (client.available()) {
        Serial.println("looking for tweet...");
        if((finder.find("<item>")&&(finder.getString("<title>jariboe: ","</title>",tweet,140)!=0))) //let's find the tweet itself between "<title>jariboe: " and "</title>" but only for 140 characters
          Serial.println(tweet);
        break;
      }
     
     
    }
    delay(1);
    client.stop();
  }




Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nu dacht ik dat helemaal in orde was, blijkbaar nog niet. Zolang de software loopt met de serailmonitor loopt hij perfect, vanaf dat er software (serial is al uit) volledig afgesloten is leest hij niks nieuws meer binnen.
Is er misschien een truckje om hem telkens te resten? Want ik maak op uit het antwoord van Jantje dat dit is wat de serail monitor doet.
Wat rond surfen leert me dat ik dan in de sourcecode zou moeten gaan prutsen. Ik ga ervan uit dat ze dan gewoon de sketch bedoelen. Of is het beter om het hardware matig te doen? zoals http://arduino.cc/blog/2007/09/07/enabling-auto-reset-on-the-arduino-ng-and-serial-boards/

Ofwel moet ik mijn delay groter maken en op het einde een poortje hoog maken en die verbinden met de reset ingang? Straks test ik of hij bij de 'gewone' resetknop de tweets inleest. Zonder het programma zelf op te starten.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Blijkbaar was ik mis, door dat mijn ledje er niet perfect in zat smiley
Werkt perfect nu! Super hard bedankt nog eens aan iedereen en aan Jantje en JO3RI in het bijzonder
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1920
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Altijd de meest voor de hand liggende oorzaken controleren  smiley-cool
Ik ben blij dat het werkt  smiley-lol
Hiep Hiep Hiep Hoeraaaaaaaaaaaaaaa

Jantje

PS ja de zon heeft geschenen vandaag in België
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Forum Moderator
Hamme, Belgium
Offline Offline
Sr. Member
*****
Karma: 4
Posts: 387
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-grin

Vergeet niet als je volledig klaar bent, om een post te maken met een video en de code. En wil je iedereen bereiken ipv van alleen de Nederlandstaligen, dat doe je dat het best in deze sectie: http://arduino.cc/forum/index.php/board,29.0.html en dan zet je hier maar een linkje naar je post.

PS: laat je ons ook weten hoeveel punten je haalde met je project? smiley
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hier ben ik weer smiley

Ondertussen heb ik al een presenatie gegeven met mijn arduino en mijn docenten vonden het heel goed. De uiteindelijke punten krijg ik op het einde van de maand. Daarnaast heb ik een nieuwe router en deze heeft een extra utp uitgang. Dus ik dacht ik test hem thuis ook nog eens, maar nu krijg ik een probleem
Code:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x07, 0x00, 0x2B };       
byte ip[] =  { 192,168,1,90}; //change this          //instellingen labo domoctica 10,25,90         thuis 192,168,1,90
byte subnet[] = {255,255,255,0}; //change this        //instellingen labo domoctica 255,255,0,0     thuis 255,255,255,0
byte gateway[] = {192,168,1,1}; //change this       //instellingen labo domoctica 10,25,255,254     thuis 192,168,1,1
byte dns[] = { 192, 168, 1, 1 }; //change this             //instellingen labo domoctica 10,65,1,     thuis 192,168,1,1
Maar als fouten:
Code:
TwitterCall_thuis:10: error: 'byte dns []' redeclared as different kind of symbol
C:\Users\Paul\Desktop\arduino-1.0.1\libraries\Ethernet/Dhcp.h:64: error: previous declaration of '<anonymous enum> dns'

Iemand een idee wat het zou kunnen zijn ?

BTW; in mijn paper stonden er 3 vermeldingen voor het forum, 2 voor het nederlandstallig en nog eens een paar extra voor jo3ri en jantje.
Joost
Logged

Forum Moderator
Hamme, Belgium
Offline Offline
Sr. Member
*****
Karma: 4
Posts: 387
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi, fijn te horen je presentatie goed ging.

is het probleem ondertussen van de baan? Ik vermoed dat er een dubbele dns in je code zit?
Logged


Pages: 1 [2]   Go Up
Jump to: