СКРИПТ: Парсер постов Twitter

Сбор и анализ всего что можно собрать из сети.
Ответить
Аватара пользователя
XwebDeveloper
Сообщения: 51
Зарегистрирован: 13 ноя 2017, 12:53

СКРИПТ: Парсер постов Twitter

Сообщение XwebDeveloper » 11 июн 2020, 17:22

Скрипт сборщик постов из заданных аккаунтов twitter.com.

Версия программы: 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 хранятся логи работы скрипта. Для каждого дня отдельный файл с логами.

Скачать скрипт:
parser_twitter.zip
(12.19 КБ) 103 скачивания

Настройки скрипта:

////////////////////////// настройки скрипта /////////////////////////
// путь к файлу с аккаунтами твиттер
$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("скрипт закончил работу");
Запрос на создание скриптов viewforum.php?f=61

Ответить