Доступні новини з онлайн-сервіса Reddit. Переходячи за посиланням, Ви потрапите на сторінку іншого ресурсу. В цьому скрипті розглянуті два способи отримання інформації з одного каналу. Мультиканльність не розглядалася, хоча й можлива.
Warning: file_get_contents(https://www.reddit.com/r/UACommunity/new.json?sort=new&limit=10): failed to open stream: HTTP request failed! HTTP/1.1 403 Blocked in /volume1/web/albireo/albireo-data/pages/notabene/php/rss-text-analitic/rss-reddit-rider/index.php on line 62 Warning: Invalid argument supplied for foreach() in /volume1/web/albireo/albireo-data/pages/notabene/php/rss-text-analitic/rss-reddit-rider/index.php on line 65 Warning: simplexml_load_file(https://www.reddit.com/r/UACommunity/new.rss?t=week&limit=10): failed to open stream: HTTP request failed! HTTP/1.1 403 Blocked in /volume1/web/albireo/albireo-data/pages/notabene/php/rss-text-analitic/rss-reddit-rider/index.php on line 114 Warning: simplexml_load_file(): I/O warning : failed to load external entity "https://www.reddit.com/r/UACommunity/new.rss?t=week&limit=10" in /volume1/web/albireo/albireo-data/pages/notabene/php/rss-text-analitic/rss-reddit-rider/index.php on line 114 Warning: Invalid argument supplied for foreach() in /volume1/web/albireo/albireo-data/pages/notabene/php/rss-text-analitic/rss-reddit-rider/index.php on line 118Berry
в межах фреймворка Альбірео
.
/* Приклади новин з Reddit двома способами */
[HTML+PHP]
<?php
// Перевірка досяжності ресурсу
$URL = 'https://www.reddit.com/r/UACommunity/';
// $URL = 'https://www.reddit.com/r/MapPorn/';
// $URL = 'https://www.reddit.com/r/UkraineWarVideoReport/';
$NUMITEMS_1 = 10;
$NUMITEMS_2 = 5;
// Перевіряємо, чи досяжний ресурс
if(isSiteAvailible($URL)) {
$head_1 = "Останні нівини. Парсінг через <span class='bg-gray750 pad7-rl pad3-tb t-tahoma t100 t-gray300 rounded3'>json</span> (варіант-1)";
$head_2 = "Останні нівини. Парсінг через <span class='bg-gray750 pad7-rl pad3-tb t-tahoma t100 t-gray300 rounded3'>xml</span> (варіант-2)";
/**
*
* Якщо ресурс існує і доступний (Варіант-1)
*
* $URL = "https://www.reddit.com/r/Ukraine_UA/new.json?sort=new&limit=10"
*
**/
$data = json_decode(file_get_contents($URL . "new.json?sort=new&limit=10"), true);
$count_1 = '';
foreach ($data['data']['children'] as $val) {
$title = $val['data']['title'];
$link_flair_richtext = $val['data']['link_flair_richtext'];
$domain = $val['data']['domain'].'<br>';
$url = $val['data']['url'];
$reddit_link = $val['data']['permalink'].'<br>';
$post_id = $val['data']['id'].'<br>';
$date = $val['data']['created_utc'].'<br>';
$user = $val['data']['author'].'<br>';
$flair = $val['data']['author_flair_text'].'<br>';
$up = $val['data']['ups'].'<br>';
$comments = $val['data']['num_comments'].'<br>';
$thumbnail_url = $val['data']['secure_media']['oembed']['thumbnail_url'];
$media_domain_url = $val['data']['secure_media_embed']['media_domain_url'].'<br>';
$created = (new DateTime())->setTimestamp($date);
$date_Y = $created->format('d.m.Y');
$date_H = $created->format('H:i');
// Перевіряємо, чи є мініатюра в новині
if(isset($thumbnail_url))
$thumbnail = "<img class='left zoom thumbnail w150px' src='" . $thumbnail_url . "'>";
else
$thumbnail = "";
$var_body_1 = "
<!-- Block content -->
<div class='mar30-b b-clearfix'>
<ul class='list-unstyled'>
<li class='t90'><span class='t-yellow250'>$date_Y</span> $date_H</li>
<li><a href='$url'>$thumbnail</a> $title<span class='pad10-rl'>|</span><a href=$url title='Перейти до джерела'>далі..</a></li>
</ul>
</div>
<!-- End block -->
";
$body_1 = $body_1 . $var_body_1;
$numitems_1 = ++$count_1;
// Виходимо з циклу, якщо досягнута вказана кількість новин
if ($numitems_1 >= $NUMITEMS_1) break;
}
/**
*
* Якщо ресурс існує і доступний (Варіант-2)
*
* $URL = "https://www.reddit.com/r/Ukraine_UA/top.rss?t=week&limit=10"
*
**/
$xml = simplexml_load_file($URL . "new.rss?t=week&limit=10");
$count_2 = '';
$category = $xml->category['term'];
foreach ($xml->entry as $x) {
$string = $x->content;
$date = $x->published;
$link = $x->link['href'];
$title = $x->title;
$created = new DateTime($date);
$date_Y = $created->format('d.m.Y');
$date_H = $created->format('H:i');
// Витягуємо посилання на img
preg_match('/src\s*=".*?[^\"]*?\/?\s*"/i',$string, $result);
// Перевіряємо, чи є мініатюра в новині, якщо ні - то пропускаємо її
if(isset($result[0])) {
$string = "<img class='zoom thumbnail w200px' " . $result[0] . "><br>";
$var_body_2 = "
<!-- Block content -->
<div class='grid-var' style='--gap: 30px; --columns: auto auto;'>
<div class='grid-item-var grid-item-var-tablet' style='--row:1/3; --row-tablet:1/3;'><a href='$link' title='Коментарі та подробиці на каналі'>$string</a></div>
<div class='t-italic t-bold-light grid-item-var-tablet'><span class='t90 t-yellow250'>$date_Y</span> <span class='t90'>$date_H</span></div>
<div class='t-italic t-bold-light grid-item-var-tablet'>Details: <a href='$link'>$category</a></div>
</div>
<div class='pad15-t t-italic t-bold-light grid-item-var-tablet t-justify' style='--column-tablet: 1/2;'>$title</div>
<hr>
<!-- End block -->
";} else {
$var_body_2 = "";
}
$body_2 = $body_2 . $var_body_2;
$numitems_2 = ++$count_2;
// Виходимо з циклу, якщо досягнута вказана кількість новин
if ($numitems_2 >= $NUMITEMS_2) break;
}
// Якщо ресурс недоступний взагалі, то попереджаємо про це
} else {
echo 'Reddit-канал зараз недоступний, вибачте';
}
?>
<div class="mar20-t b-flex flex-wrap-phone flex-jc-center">
<div class="w45 w100-phone mar20-b-phone">
<h5 class="mar30-tb"><?= $head_1 ?></h5>
<div class="t-gray500"><?= $body_1 ?></div>
</div>
<div class="w10 hide-phone"></div>
<div class="w45 w100-phone">
<h5 class="mar30-tb"><?= $head_2 ?></h5>
<div class="t-gray500"><?= $body_2 ?></div>
</div>
</div>
<?php
/*** Function zone ***/
function extractString($string, $start, $end) {
$string = " ".$string;
$ini = strpos($string, $start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string, $end, $ini) - $ini;
return substr($string, $ini, $len);
}
function isSiteAvailible($url) {
// Перевірка правильності URL
if(!filter_var($url, FILTER_VALIDATE_URL)){
return false;
}
// Ініціалізація cURL
$curlInit = curl_init($url);
// Встановлення параметрів запиту
curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curlInit, CURLOPT_HEADER,true);
curl_setopt($curlInit, CURLOPT_NOBODY,true);
curl_setopt($curlInit, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curlInit, CURLOPT_URL, $url);
curl_setopt($curlInit, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curlInit, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curlInit, CURLOPT_SSL_VERIFYPEER, false);
// Отримання відповіді
$response = curl_exec($curlInit);
// Закриття сURL
curl_close($curlInit);
return $response ? true : false;
}
?>