Вопрос или проблема
Привет, я создаю новостной сайт. Я пытаюсь автоматизировать его.
- URL новостей (метабокс)
- Заголовок
- Область содержания
- Изображение (опция миниатюры на WordPress)
Когда я вставляю URL сайта, я хотел бы, чтобы другие метабоксы извлекали данные из источника http://www.bbc.co.uk/news/technology-34527439
Я хочу, чтобы заголовок и описание извлекались с сайта BBC.
- URL новостей: http://www.bbc.co.uk/news/technology-34527439
- Заголовок: должен извлекаться из
<title>
- Область содержания: должна быть из
<meta name="description".>
- Изображение: должно быть первым изображением в контенте
Я вижу, что вы можете использовать php cURL, любые дополнительные указания по WordPress будут весьма полезны http://www.php.net/manual/en/curl.examples-basic.php
Спасибо
Вот, пожалуйста:
class UrlToTitleConverter{
public function convert($Url){
$response = wp_remote_get($Url);
if ( is_array( $response ) ) {
$body = $response['body'];
$title = substr($body, strpos($body, '<title>')+7);
$title = substr($title, 0, strpos($title, '</title>'));
}
return $title;
}
}
Попробуйте это
$tags = get_meta_tags('http://www.bbc.com/news/technology-34527439');
$title = $tags['twitter:title'];
$content = $tags['description'];
$image = $tags['twitter:image:src'];
Если вам удобно использовать twitter:title и twitter:image:src. Вам также нужно будет проверить каждый источник, из которого вы пытаетесь извлечь данные, чтобы убедиться, что у них есть согласованная мета-схема. Если она отличается от сайта bbc.com, просто сделайте оператор switch по какому-то идентификатору для сайта, с которого вы извлекаете теги, чтобы построить массив данных.
Вывод по предоставленному URL.
Array
(
WordPress from url get external source title => Агентство национальной преступности Великобритании сообщает, что кибератакующие украли более £20 миллионов с английских банковских счетов.
[x-country] => us
[x-audience] => US
[cps_audience] => US
[cps_changequeueid] => 259204896
[twitter:card] => summary_large_image
[twitter:site] => @BBCWorld
[twitter:title] => Онлайн-атака приведет к краже £20 миллионов с британских банковских счетов - BBC Новости
[twitter:description] => Агентство национальной преступности Великобритании сообщает, что кибератакующие украли более £20 миллионов с английских банковских счетов.
[twitter:creator] => @BBCWorld
[twitter:image:src] => http://ichef.bbci.co.uk/news/560/cpsprodpb/37A1/production/_86114241_thinkstock.jpg
[twitter:domain] => www.bbc.com
[apple-mobile-web-app-title] => BBC Новости
[application-name] => BBC Новости
[msapplication-tileimage] => http://static.bbci.co.uk/news/1.91.0426/windows-eight-icon-144x144.png
[msapplication-tilecolor] => #bb1919
[mobile-web-app-capable] => yes
[robots] => NOODP,NOYDIR
[theme-color] => #bb1919
[viewport] => width=device-width, initial-scale=1, user-scalable=1
)
К вашему сведению – у WordPress есть обертка для cURL, которая полезна
wp_remote_get( $url, $args );
https://codex.wordpress.org/Function_Reference/wp_remote_get
Ответ или решение
Как получить заголовок и содержимое из внешнего URL в WordPress
Создание новостного сайта требует автоматизации различных процессов, включая извлечение информации из внешних источников. В приведенном примере мы рассмотрим, как автоматически получать заголовок, описание и главное изображение из заданного URL новостной статьи. Для этого мы воспользуемся встроенными функциями WordPress и PHP без необходимости использования внешних библиотек.
Шаг 1: Использование wp_remote_get
WordPress предоставляет удобный метод wp_remote_get
, который является оберткой для cURL. Это позволяет безопасно выполнять HTTP-запросы и получать данные из внешних источников.
$response = wp_remote_get($url);
if (is_wp_error($response)) {
return; // Обработка ошибки
}
$body = wp_remote_retrieve_body($response);
Шаг 2: Извлечение заголовка
Для извлечения заголовка из HTML-кода страницы мы можем использовать регулярные выражения. Однако при этом необходимо учитывать реалии разметки страниц, чтобы избежать ошибок в случае отсутствия заголовка в ожидаемом формате.
function get_title($body) {
preg_match('/<title>(.*?)<\/title>/', $body, $matches);
return $matches[1] ?? 'Заголовок не найден';
}
Шаг 3: Извлечение описания
Мета-тег description
часто используется для предоставления короткой аннотации содержимого страницы. Это может быть выполнено следующим образом:
function get_description($body) {
preg_match('/<meta name="description" content="(.*?)"/', $body, $matches);
return $matches[1] ?? 'Описание не найдено';
}
Шаг 4: Извлечение первого изображения
Чтобы получить первое изображение из содержания, мы можем воспользоваться аналогичным подходом. Однако учтите, что структура HTML-кода может различаться на разных сайтах.
function get_first_image($body) {
preg_match('/<img.*?src=["\'](.*?)["\']/i', $body, $matches);
return $matches[1] ?? 'Изображение не найдено';
}
Шаг 5: Полная реализация
Ниже представлена полная функция, которая объединяет все вышеперечисленные шаги:
function fetch_article_data($url) {
$response = wp_remote_get($url);
if (is_wp_error($response)) {
return; // Обработка ошибки
}
$body = wp_remote_retrieve_body($response);
// Извлечение данных
$title = get_title($body);
$description = get_description($body);
$image = get_first_image($body);
// Возвращаем массив с данными
return [
'title' => $title,
'description' => $description,
'image' => $image,
];
}
Вывод
С помощью описанного подхода Вы можете автоматизировать процесс извлечения информации из новостных статей, занося необходимые данные в мета-боксы WordPress. Таким образом, это позволит значительно ускорить процесс обновления контента на Вашем сайте. Не забывайте проверять корректность заголовков, описаний и изображений, так как структура страниц разных сайтов может различаться. Хорошая практика — это добавить обработку ошибок и логирование для упрощения отладки в случае проблем.
Также стоит помнить о соблюдении авторских прав при использовании контента из других источников. Надеюсь, этот ответ был полезен и предоставил все необходимые инструменты для успешной автоматизации Вашего новостного сайта.