ioBroker скрипт часть.1
Преамбула.
Началось все с того что данные драйвера yr.no погода перестали показывать актуальную погоду, что собственно и стало
причиной написания данного скрипта.
Начало.
Прежде чем использовать данный скрипт необходимо подключить в настройках драйвера JavaScript , пару модулей, это:
cheerio - быстрый и гибкий парсер на основе jQuery.
iconv-lite -конвертер кодировок.
Можно было обойтись и без конвертера но русские символы прилетали кракозябрами.
На скриншоте это будет так…
Так как кодер я начинающий, и мне понятнее на примерах что и куда, небольшой пример как найти подходящий код.
Пример: Заходим на gist.github.com
В поиске пишем iconv-lite
В результатах поиска этот jscript , который и стал базой для нашего скрипта.
А это наша жертва meteovesti.ru/pogoda_5/34214 , выделенные красным значения будут записанны в объекты.
Сам скрипт:
createState ( ' javascript.0.cast.temp ' , 0 ); //создаем обьекты в папке javascript.0=>cast с значениями 0
createState ( ' javascript.0.cast.date ' , 0 );
createState ( ' javascript.0.cast.temp1 ' , 0 );
createState ( ' javascript.0.cast.date1 ' , 0 );
schedule ( ' */30 * * * * ' , function () { //крон, парсим каждые 30 минут
var request = require ( " request " );
var cheerio = require ( ' cheerio ' );
var iconv = require ( ' iconv-lite ' );
var Dat , Temp , Dat1 , Temp1
var requestOptions = { method : " post "
, uri : " http://www.meteovesti.ru/pogoda_5/34214 " //сайт погоды откуда парсим температуру и дату
, headers : { " User-Agent " : " Mozilla/5.0 " }
, encoding : null
};
// request
request ( requestOptions , function ( error , response , body ) {
// по рузки
var strContents = new Buffer ( body );
var $ = cheerio . load ( iconv . decode ( strContents , ' windows-1251 ' ). toString ()); //переводим кракозябры в читаемый вид
Dat = $ ( ' td .wpdate ' ). eq ( 0 ). text ();
Temp = $ ( ' td .wptemp ' ). eq ( 0 ). text ();
Dat1 = $ ( ' td .wpdate ' ). eq ( 1 ). text ();
Temp1 = $ ( ' td .wptemp ' ). eq ( 1 ). text ();
setState ( ' javascript.0.cast.temp ' , Temp ); //записываем спарсеные значения в объект
setState ( ' javascript.0.cast.date ' , Dat );
setState ( ' javascript.0.cast.temp1 ' , Temp1 );
setState ( ' javascript.0.cast.date1 ' , Dat1 );
//console.log(Dat);
//console.log(Temp);
});
});
Завершение.
Значения прилетели в объекты, что дальше можно с ними делать…
Comments