Stap 9: Programmering stap 3: zoeken Twitter met TCP/IP poort 80
bijvoorbeeld:
"Open www.google.com 80"
verschijnt een Http-verbinding naar www.google.com.
Twitter vereist eigenlijk meer van het Http-protocol dan google.
Bijvoorbeeld is de "Host"-veld vaak vereist in het geval er meer dan één
domeinnaam toegewezen aan het IP-adres van de server, zodat het die vertellen kan
website die u eigenlijk wilt.
Twitter vereist ook dat een definitieve regelinvoer en vervoer terug ("\r\n")
"GET \n""Host: server\r\n"
"\r\n"
Ik gebruik search.json in plaats van search.atom te geven van de resultaten in niet-HTML-formaat, en meer gemakkelijk geparseerd. (Zie apiwiki.twitter.com/Twitter-API-Documentation)
/ * Parameters: de server aan telnet in, de opdracht get dat worden verzonden moet, een aangepaste HtmlParser die wordt aangeroepen telkens wanneer een teken wordt ontvangen. De parser is verantwoordelijk voor de verwerking van de HTML-code die wordt geretourneerd. * / boolWiFly::HttpWebRequest (constchar-server, constchar * getCommand HtmlParser * parser) {m_printer -> println(getCommand); FlushRX(); FlushRX(); Voer opdrachtmodus EnterCommandMode(); FlushRX(); openen van een TCP connectie, poort 80 voor HTTP WriteToWiFly("open"); WriteToWiFly(server); WriteToWiFlyCR ("80"); boolopenOK = WaitUntilReceived(COMM_OPEN); Als (openOK == false) {m_printer -> println ("open poort is mislukt!"); delay(1000); WriteToWiFlyCR("close"); WaitUntilReceived(COMM_CLOSE); ExitCommandMode(); returnfalse; } // eg. "GET /search.json?q=foo HTTP/1.1\r\n" WriteToWiFlyCRLF(getCommand); bv. "Host: search.twitter.com\r\n" WriteToWiFly ("Host:"); WriteToWiFlyCRLF(server); "\r\n" WriteToWiFlyCRLF(""); nu wachten op de reactie inttimeOut = 0; boolok = false; terwijl (time-out < 5000) / / timeout na 5 seconden {if((ReadCharFromWiFly(LSR) & 0x01)) {charincoming_data = ReadCharFromWiFly(RHR); m_printer -> print(incoming_data,BYTE); booldone = parser -> Parse(incoming_data); Als (gedaan) {ok = true; breken; } timeOut = 0; Reset de time-out} else {delay(1); timeOut ++; }} FlushRX(); TCP verbinding verbreken. WriteToWiFlyCR("close"); WaitUntilReceived(COMM_CLOSE); ExitCommandMode(); returnok; }