Офис НП AMWAY в Ярославле
→ На карте Купить AMWAY: офис в ЯрославлеКонсультации, презентации, мастер–классы, знакомство с продукцией, заказ и выдача купленного товара:
●Адрес: улица Валентины Терешковой, дом 1 (Вход со двора)
●Телефон: +7 (920) 112-00-91
●Email: matyxho@mail.ru
●Сайт: https://www.amway.ru/user/lebedem
●Визитка: http://yar.meweb.ru
Иерархия статей
Статьи » Программирование » PHP: Функция парсинга и кэширования файлов
Сниппет
Небольшая PHP-функция для парсинга данных с другого сервера с сохранением (кэшированием)
PHP: Функция парсинга и кэширования файлов
В одной из предыдущих статей "Вывод информации о видео с сервиса YouTube" я уже давал представление, как использовать Curl для парсинга файлов с другого сервера, сейчас же хочу лишь немного развить тему. Ниже представлена функция, при использовании которой мы не просто будем парсить файлы, но и сохранять их содержимое у себя на сервере (кэш), дабы уменьшить нагрузку.
Оговорюсь, что функция была найдена мною на просторах интернет, однако претерпела существенные изменения, поэтому ссылку на первоначальный вариант опускаю без малейших угрызений совести.
В чем же преимущества:
Видео с ютьюб:
Ну и еще один небольшой пример с vk.com
Оговорюсь сразу, что последний параметр в функции — не обязательный (у меня прекрасно работает без подстановки "левого" агента).
Удачи в парсинге и всех благ!
Код: PHP
function cachedCurl($url, $expires, $ycname, $ua = FALSE) {
$filename = dirname(__FILE__).DIRECTORY_SEPARATOR."cache".DIRECTORY_SEPARATOR.$ycname.".cache";
$changed = file_exists($filename) ? filemtime($filename) : 0;
$diff = time() - $changed;
if (!$changed || ($diff > $expires)) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
if ($ua) {
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
}
$rawData = curl_exec($ch);
curl_close($ch);
if (!$rawData) {
if ($changed) {
$cache = unserialize(file_get_contents($filename));
return $cache;
} else {
return FALSE;
}
}
$cache = fopen($filename, "wb");
if (is_writable($filename)) {
$write = fwrite($cache, serialize($rawData));
fclose($cache);
return $rawData;
} else {
fclose($cache);
return FALSE;
}
}
$cache = unserialize(file_get_contents($filename));
return $cache;
}
Оговорюсь, что функция была найдена мною на просторах интернет, однако претерпела существенные изменения, поэтому ссылку на первоначальный вариант опускаю без малейших угрызений совести.
В чем же преимущества:
- Файл сохраняется к нам на сервер, нет необходимости каждый раз делать запросы на сторонний сервер
- Curl в 2-4 раза быстрее file_get_contents
- Есть возможность подменить User–Agent
Код: PHP
$ua = array(
"yandex" => "Mozilla/5.0 (compatible: YandexBot/3.0; +http://yandex.com/bots)",
"mail" => "Mozilla/5.0(compatible: Mail.RU/2.0)",
"google" => "Mozilla/5.0(compatible: Googlebot/2.1; +http://www.google.com/bot.html)",
"bing" => "Mozilla/5.0 (compatible: bingbot/2.0; +http://www.bing.com/bingbot.htm)",
"yahoo" => "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)",
"wow" => "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0"
);
Видео с ютьюб:
Код: PHP
$cache = 600; // время обновления (перезаписи) кэш-файлов в секундах
$key = "XXXXXX"; // ваш персональный ключ api
$id = "ID_VIDEO"; //идентификатор видео
$api = "https://www.googleapis.com/youtube/v3/videos?id=".$id."&part=snippet%2Cstatistics%2CcontentDetails&key=".$key; // адрес
$youtube = json_decode(cachedCurl($api, $ycache, $id, $ua['yandex'])); // вернет необходимую информацию, сохранив ее в файл, типа такого /cache/Ltm9_f5tjc.cache
// user-agent в данном примере от яндекс, но не рекомендую, это лишь для ознакомления
Ну и еще один небольшой пример с vk.com
Код: PHP
$cache = 60; // время обновления (перезаписи) кэш-файлов в секундах
$id = "XXXXXX"; // id пользователя
$api = "http://api.vk.com/method/users.get?uids=".$id."&fields=online%2Clast_seen"; // адрес
$vk = json_decode(cachedCurl($api, $cache, $id, $ua['wow'])); // вернет имя, статус онлайн, время визита, устройство. Что-то типа
// {"response":[{"uid":65333,"first_name":"Катюха","last_name":"Королёва","online":0,"last_seen":{"time":1436518098,"platform":4}}]}
Оговорюсь сразу, что последний параметр в функции — не обязательный (у меня прекрасно работает без подстановки "левого" агента).
Удачи в парсинге и всех благ!
Понравилась статья?
Метки для данной статьи
Похожие статьи
Заголовок
Категория
Просмотров
Поделиться:
Последние активные темы форума
Темы | Просмотров | Ответов | Последние сообщения | |
Вопрос по переделке bb-кода PHP, MySQL |
22339 | 5 | Pisatel 26. мая 2017 |
|
Вопросы по Ajax форме обратной связи CMS PHP Fusion |
68624 | 48 | Ditrin 19. февраля 2017 |
|
BBCode YouTube Video Colorbox mod CMS PHP Fusion |
15363 | 2 | Pisatel 10. декабря 2016 |
|
Как лучше создать собственную страницу? CMS PHP Fusion |
17901 | 17 | Pisatel 11. мая 2016 |
|
Небольшие вопросы по скриптам магазина и катало... PHP, MySQL |
144901 | 80 | Pisatel 11. января 2016 |
|
BBCode Code mod CMS PHP Fusion |
14424 | 0 | Pisatel 31. августа 2015 |
|
Ajax Like Dislike Article Panel CMS PHP Fusion |
22561 | 16 | Pisatel 07. июля 2015 |
|
Хлебные крошки / BreadCrumbs SEO Panel CMS PHP Fusion |
26259 | 17 | Pisatel 04. июля 2015 |
|
Abbr Description BBCode CMS PHP Fusion |
7669 | 0 | Pisatel 15. июня 2015 |
|
Плагин Email рассылки Mail To All by Pisatel CMS PHP Fusion |
37010 | 32 | Pisatel 26. апреля 2015 |
|
Подозрительный трафик и прочие страшилки Всякая хрень |
11801 | 2 | Ditrin 23. апреля 2015 |
|
Мод Newsletter - рассылка писем пользователям с... CMS PHP Fusion |
31045 | 13 | Pisatel 10. апреля 2015 |
|
Мод отправки писем PHPMailer для PHP-Fusion CMS PHP Fusion |
128398 | 113 | Ditrin 06. апреля 2015 |
|
Появление неизвестного файла subscriptions.php CMS PHP Fusion |
8846 | 2 | Pisatel 06. апреля 2015 |
|
Autoban on IP CMS PHP Fusion |
23190 | 13 | Pisatel 03. апреля 2015 |