Версия программы: Human Emulator Studio 7.0.50.
Браузер: Chromium.
Логика:
1. Получаем аккаунт твиттера из файла и переходим на него.
2. Получаем время опубликованных в аккаунте постов.
3. Если имеем сохранённое время и дату последнего собранного сообщения для этого аккаунта берём его, если нет, берём дату и время из настроек скрипта.
4. Сохраняем все посты в файл с названием канала, которые подходят по времени публикации.
5. Берём следующий аккаунт твиттера и повторяем предыдущие пункты пока не закончатся аккаунты в файле.
Скрипт состоит:
Запускаемый файл parser_twitter.php. В папке tools в файле functions.php прописаны подключаемые команды.
В папку res записываются папки и файлы с результатами сбора. Имя файла акканут твиттера.txt содержит собранные сообщения из аккаунта твиттер в формате одна строка один пост.
В папке data лежит файл с аккаунтами твиттера для сбора постов chanels.txt в формате одна строка один аккаунт. Там же лежат файлы с датой и временем последнего собранного поста last_tme_имя аккаунта.txt.
В папке log хранятся логи работы скрипта. Для каждого дня отдельный файл с логами.
Скачать скрипт:
Настройки скрипта:
////////////////////////// настройки скрипта ///////////////////////// // путь к файлу с аккаунтами твиттер $arr_chanels = file("data/chanels.txt"); // папка с результатами $path_to_res = $debug->get_cur_script_folder().'res\\'; // начальное время если нету времени последнего собранного // за последний час. если надо увеличить промежуток времени // тогда меняете 1 на нужное количество часов // например -24 будет за последние 24 часа и т.д. $start_time = strtotime('-1 hours');
Сам скрипт:
debug_mess("скрипт запустили"); foreach ($arr_chanels as $twiter_chanel) { debug_mess("работаем с каналом ".$twiter_chanel); // получить время последнего собранного твита из канала if ($file_os->is_exist("data//last_tme_".trim($twiter_chanel).".txt")) $start_time=strtotime(trim($textfile->get_line_from_file("data//last_tme_".trim($twiter_chanel).".txt",false,0))); //Заходим в твиттер $browser->navigate("https://twitter.com/".$twiter_chanel); //Пауза sleep($wt); // получить все элементы $arr_html=$element->get_all_by_tag("time"); // вывод массива //print_r($arr_html->get_attribute("datetime")); //присваеваем переменным $ii значение 0 $ii=0; // пропускаем закреплённый твит if($span->is_exist_by_inner_text("Закрепленный твит")) $ii=1; // для захода в цикл получаем время первого $last_time=strtotime($arr_html[$ii]->get_attribute("datetime")); // сохраняе время самого свежего твита if($start_time<$last_time) $textfile->write_file('data/last_tme_'.trim($twiter_chanel).'.txt',$arr_html[$ii]->get_attribute("datetime")); debug_mess("начальная дата :".date('d.m.Y H:i', $start_time)); debug_mess("дата последнего собранного твита:".date('d.m.Y H:i', $last_time)); // получаем нужное количество твитов по времени while($start_time<$last_time) { //получение объекта дом интерфейс $in_html = $arr_html[$ii]; // if(!$in_html) { //Находим элемент "time" по тегу $arr_html=$element->get_all_by_tag("time"); //print_r($arr_html->get_attribute("datetime")); //выводим значение $last_value<br> //echo "ищем в массиве значение $last_value<br>"; $ii = array_search($last_value, $arr_html->get_attribute("datetime")); //Выводим стартовый номер из массива $ii <br> // Прибавляем к переменной $ii $ii ++; continue; } // время твита $last_value = $arr_html[$ii]->get_attribute("datetime"); // задаём фокус $in_html->focus(); // Пауза sleep($wt); // родительский div $parent = $in_html->get_parent(6); // получить текст сообщения $inner_html=$parent->get_child_by_number(1)->get_child_by_number(0)->get_inner_text(); // получаем время сообщения debug_mess("время публикации: ".$last_value); debug_mess("Сохраняем текст твита в файл"); // сохранить текст твита в файл для канала $textfile->add_string_to_file($path_to_res."//".trim($twiter_chanel).".txt", trim($inner_html)."\r\n", 60); // время твита для сравнивания с начальной датой $last_time = strtotime($last_value); // переходим к следующему $ii++; } } debug_mess("скрипт закончил работу");