Как оптимизировать парсинг комментариев в группе ВКонтакте?

Добрый день!

Есть скрипт, который запускается по крону и проверяет, появились ли новые комментарии на стене группы к последним N постов. Сейчас скрипт выглядит следующим образом:

$public = ""; // Домен группы
$publicid = ""; // ID группы
$howmuch = 15; // Количество постов
$log = file_get_contents("log2.txt"); // Файл с ID комментариев

// Забираем посты по API ВК
$getWall = file_get_contents('https://api.vk.com/method/wall.get?v=5.27&domain='.$public.'&count='.$howmuch);
$getWall = json_decode($getWall);
$getWall = $getWall->response->items;

for ($i = 0; $i < $howmuch; $i++) {
	// Спим 0.3 секунды
	usleep(333333);

	// Забираем комменты к N посту по API ВК
	$getComm = file_get_contents('https://api.vk.com/method/wall.getComments?v=5.27&owner_id='.$publicid.'&post_id='.$getWall[$i]->id.'&count=100');
	$getComm = json_decode($getComm);
	$getComm = $getComm->response->items;

	for ($b = 0; $b < count($getComm); $b++) {
	// Если ID коммента уже есть в файле log2.txt, то ничего не делаем
	if (preg_match('/'.$getComm[$b]->id.'/', $log)) {
	}
	// Если такого ID в логе нет, то выводим коммент на странице
	else {
	echo '<span style="font-family:Arial;font-size:14px;">'.$getComm[$b]->text.'<br><a href="http://vk.com/wall'.$publicid.'_'.$getWall[$i]->id.'?reply='.$getComm[$b]->id.'">link</a></span><p>&nbsp;</p>';
	// И попутно записываем его ID в лог
	$file=fopen("log2.txt", "a");
	fwrite ($file, $getComm[$b]->id."\n");
	fclose($file);
	}
	}
}


Сейчас всё отлично работает, но с данными настройками скрипт выполняется примерно 10 секунд.

Вопрос: можно ли как-то оптимизировать его, чтобы он работал хотя бы чуточку быстрее?
  • Вопрос задан
  • 3262 просмотра
Пригласить эксперта
Ответы на вопрос 1
@IceJOKER
Web/Android developer
15 записей по 0.3с(ваш usleep(333333) --- 333333мс - это разве 0.3секунды? О_О )= 4.5

Как минимум можно написать эти строчки:
if (preg_match('/'.$getComm[$b]->id.'/', $log)) {
  }

более грамотно
if (strpos($log, $getComm[$b]->id) === FALSE) continue;

и зачем ID хранить в файле.

$file=fopen("log2.txt", "a");
  fwrite ($file, $getComm[$b]->id."\n");
  fclose($file);

^^^
не лень? когда все это можно одной строчкой сделать
file_put_contents();

offset - используйте этот параметр грамотно и вы избавите себя от получения лишних комментов, что повысит быстродействие
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы