Помогите новичку с Twitter API 1.1
- Войдите на сайт для отправки комментариев
Чт, 15/05/2014 - 21:15
Здорово, народ. Помогите кто чем может. Есть шаблон, но он не работает в связи с обновлением Twitter API 1.1. по моему, надо исправить в Connection с XML на JSON? или как? можете написать рабочий (проверенный) вариант?
Этот скетч показывает как подключиться к Twitter с помощью Ethernet
шилда, получить ответ в формате XML и найти в нём текст последнего
опубликованного твита. Искать в XML ответе будем строку вида
Hello Cruel World. Если последний твит будет таким - подадим
напряжение на Pin D2 => светодиод загорится, если текст твита
другой, светодиод гореть не будет
*/
#include <SPI.h>
#include <Ethernet.h>
// Введите MAC-адрес и IP-адрес вашего контроллера
// IP-адрес должен соответствовать вашей локальной сети
byte mac[] = {
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 };
IPAddress ip(191,11,1,1); //<<< IP-АДРЕС ВВОДИТЬ СЮДА!!!
// инициализации экземпляра библиотеки:
EthernetClient client;
// задержка между запросами
const int requestInterval = 60000;
// URL сервера, которому будем отправлять запросы
char serverName[] = "api.twitter.com";
// сделан ли запрос после подключения
boolean requested;
// время в милисекундах с последнего подключения к серверу
long lastAttemptTime = 0;
// строка для сохранения текста с сервера
String currentLine = "";
// строка для хранения твита
String tweet = "";
// переменная хранит состояние: читаете ли твит сейчас
boolean readingTweet = false;
void setup() {
pinMode(2, OUTPUT);
// резервируем место для строки:
currentLine.reserve(256);
tweet.reserve(150);
// инициализация последовательного порта:
Serial.begin(9600);
// попытка подключения с DHCP:
if (!Ethernet.begin(mac)) {
// если DHCP-сервер отсутствует в сети,
// подключаемся с заданным нами IP-адресом:
Ethernet.begin(mac, ip);
}
// подключаемся к Twitter:
connectToServer();
}
void loop()
{
if (client.connected()) {
if (client.available()) {
// считываем полученные байты:
char inChar = client.read();
// добавляем полученные байты в конец строки:
currentLine += inChar;
// если получен символ новой строки, очищаем переменную:
if (inChar == '\n') {
currentLine = "";
}
// если текущая строка заканчивается символами , значит
// сейчас будет следовать непосредственно текст твита:
if ( currentLine.endsWith("")) {
// начало чтения твита. Очищаем переменную tweet:
readingTweet = true;
tweet = "";
}
// если сейчас происходит считывание байтов твита,
// добавляем их в строковую переменную tweet:
if (readingTweet) {
if (inChar != '<') {
tweet += inChar;
}
else {
// если был получен символ "<",
// значит мы достигли конца твита:
readingTweet = false;
Serial.println(tweet);
if(tweet == ">Hello Cruel World"){
digitalWrite(2, HIGH);
Serial.println("LED ON!");
}
if(tweet != ">Hello Cruel World"){
digitalWrite(2, LOW);
Serial.println("LED OFF!");
}
// отключаемся от сервера:
client.stop();
}
}
}
}
else if (millis() - lastAttemptTime > requestInterval) {
// если мы в данный момент не подключены к серверу
// и прошло 2 минуты с момента последнего подключения, пробуем
// подключится снова и прочитать последний опубликованный твит:
connectToServer();
}
}
// функция подключения к серверу Twitter:
void connectToServer() {
Serial.println("connecting to server...");
if (client.connect(serverName, 80)) {
Serial.println("making HTTP request...");
// Создаем GET HTTP-запрос к твиттеру:
client.println("GET /1/statuses/user_timeline.xml?screen_name=RandyMcTester&count=1 HTTP/1.1");
client.println("HOST: api.twitter.com");
client.println();
}
// записываем в переменную время текущей попытки соединения:
lastAttemptTime = millis();
}