Помогите новичку с 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(); }