Добавить новость





160*600

Новости сегодня на DirectAdvert

Новости сегодня от Adwile

Актуальные новости сегодня от ValueImpression.com


Опубликовать свою новость бесплатно - сейчас


Сервис парсинга Wordpress сайтов (указываете донора, логин/пароль акцептора и сайт наполнен) + бесплатные лицензии

Здравствуйте!

Был у меня клиент, который практически каждые 3 дня заказывали парсинг Wordpress сайтов.
Ничего нестандартного - обычный блог, комментарии.

Я подошел к делу очень абстрактно и создал плагин, который может импортировать практически любой Wordpress сайт.
Единственное требование к донору - включенный REST API (встроен и включен по умолчанию в Wordpress начиная с версии 4.7).

Плагин может парсить данные в уже наполненный рабочий Wordpress сайт, а также из множества доноров
(никаких прямых записей в базу данных + созданию уникальный хешей на основе ID REST сущности на стороне донора + хост донора в качестве префикса)


Основные особенности плагина:
Вытягивает содержимое Wordpress сайтов через встроенный в Wordpress REST API, соответственно, экономит ресурсы (время, трафик, ОЗУ) по сравнению с парсингом HTML страниц с использованием регулярных выражений или simplehtmldom.
Среднее время копирования блога (500 публикаций, 2000 комментариев, 2000 медиафайлов) - 15 минут

Плагин не требует установки дополнительных библиотек на сервер, типа Curl, потому, что работает исключительно за счет встроенного в ядро функционала Wordpress, например, WP HTTP для сетевых запросов, WP CRON для планировщика, WP Transient Cache для кеширования.

Плагин поддерживает обновление уже импортированных данных по расписанию (WP CRON - не требует настройки на сервере), а также опрос новых комментариев, обновлений.
В отличии от стандартных решений, парсер, который работает по REST API узнает об обновлениях без повторной проверки и сравнения документов (просто передав HTTP GET параметр after=ДАТА ПОСЛЕДНЕГО ЗАПУСКА ПАРСЕРА в REST запросе).
Соответственно, если по сравнению с предыдущим запуском есть обновления, в ответ парсер получает эти обновления, если нет - ошибку 400.

Парсер импортирует ВСЕ СТАНДАРТНЫЕ СУЩНОСТИ WORDPRESS, а именно
публикации,
страницы,
комментарии,
медиафайлы (скачивает на сервер),
категории,
метки,
мета данные медиафайлов,
аватары и мета данные комментаторов

Плагин заменяет URL донора на URL акцептора в содержимом публикаций, страниц и комментариев используя simplehtmldom,
угадывает шорткоды WPBakery (большинство шорткодов Wordpress отдает в оригинале по REST API, вам нужно только загуглить и установить соответствующие плагины для их обработки на стороне акцептора).

Плагин импортирует данные используя стандартные функции Wordpress, такие как - wp_insert_post, add_post_meta, ... соответственно, плагин совместим с другими плагинами, например, Yoast SEO.

Плагин работает из под чистой инсталляции Wordpress (акцептор), плавно заполняя ваш сайт, поддерживает планирование расписаний в WP CRON, умные интервалы (для обхода автоматических блокировок), а также, приятный бонус - если ваш сайт работает из под Cloudflare, вы практически неуязвимы блокировке со стороны донора (благодаря динамическому адресу сервера).

Вы можете сами протестировать плагин бесплатно и неограниченно (плагин с поддержкой Woocommerce получает каждый спонсор)
http://167.71.82.159/wp-rest-api-import.zip


Разархивируйте содержимое архива в папку wp-content/plugins чистой инсталляции Wordpress, откройте wp-rest-api-import.php и укажите константы WP_REST_API_IMPORT_SCHEME (http либо https) и WP_REST_API_IMPORT_HOST (домен Wordpress сайта с открытым REST API).
Активируйте плагин в консоли Wordpress.
Инструменты - Импорт Wordpress REST API - Запустить задачу немедленно и наблюдайте за плавным наполнением сайта

Наполненный сайт будет работать с любой Wordpress темой, так, как использует исключительно стандартный функционал Wordpress
Соответственно, вы можете выводить содержимое донора (или доноров) на оптимизированном более современном фронтэнде (например, установив оптимизированную премиум-тему) обойдя по качеству финального сайта даже донора.


Данный плагин в виде Wordpress плагина не будет обновляться, поэтому, его будущее сейчас зависит от спроса.

На данный момент я работаю над сервисом, который упростит процесс копирования Wordpress сайта до того, что вам будет достаточно указать адрес донора, адрес акцептора, логин/пароль Wordpress пользователя на стороне акцептора с правами администратора и сервис сам будет добавлять содержимое используя тот же REST API.

Каждый параметр, который импортируется можно пропустить через неограниченное количество встроенных в сервис функций, в том числе, автоматический перевод/синонимизация на phpmorphy.
Какие возможности процессинга хотели бы увидеть вы в первую очередь?

Лицензирование скорее всего за количество REST запросов к донору (больше содержимого - дороже парсинг).

На данный момент, я ищу спонсоров, которые получают доступ к ранним версиям сервиса, а также бесплатные годовые+ лицензии.

Вступить в ряды ожидающих, получить первые неограниченные годовые+ лицензии
Яндекс кошелек 410011404826845 (в комментариях указывайте REST + электронная почта)


Для обратной связи используйте данную тему
media.galer@gmail.com
Telegram @arturkohut


Также, публикую участки исходного кода на случай заинтересованных в написании более специфичного Wordpress плагина/функционала
(контакты выше)

Инкрементальная пауза с привязкой к вызывающей функции/ID итерации с использованием последнего успешного интервала для обхода/предотвращения блокировок со стороны донора
Код:

        function wp_rest_api_import_incremental_sleep($function, $id = 0) {
                $usleep_delays = array(
                        200,
                        500,
                        1000,
                        2000,
                        5000
                );

                if (!isset($GLOBALS[__FUNCTION__]))
                        $GLOBALS[__FUNCTION__] = array();

                if (!isset($GLOBALS[__FUNCTION__]['last_used_usleep_delay']))
                        $GLOBALS[__FUNCTION__]['last_used_usleep_delay'] = 0;

                if (!isset($GLOBALS[__FUNCTION__][$function]))
                        $GLOBALS[__FUNCTION__][$function] = array();

                if (!isset($GLOBALS[__FUNCTION__][$function][$id])) {

                        if ($GLOBALS[__FUNCTION__]['last_used_usleep_delay'] > 0)
                                $GLOBALS[__FUNCTION__]['last_used_usleep_delay']--;

                        $GLOBALS[__FUNCTION__][$function][$id] = $GLOBALS[__FUNCTION__]['last_used_usleep_delay'];
                }

                if ($GLOBALS[__FUNCTION__][$function][$id] >= sizeof($usleep_delays)) {
                        return false;
                }

                usleep(1000 * $usleep_delays[$GLOBALS[__FUNCTION__][$function][$id]]);
                $GLOBALS[__FUNCTION__][$function][$id]++;
                $GLOBALS[__FUNCTION__]['last_used_usleep_delay']++;

                return true;
        }

Импорт найденных в содержимом публикации/страницы медиафайлов на сервер акцептора, а также их метаданных (title, alt) в Wordpress медиатеку акцептора (возвращает ID добавленного медиафайла)

Код:

        function wp_rest_api_import_prepare_media($id, $src = '', $alt = '', $skip_rest = false) {
                die_if_wp_rest_api_import_task_is_expired();

                $wp_query = new WP_Query(array(
                        'post_type' => 'attachment',
                        'post_status' => 'inherit',
                        'meta_key' => 'wp_rest_api_import_prepare_media_id',
                        'meta_value' => $id,
                        'meta_compare' => '='
                ));

                if ($wp_query->have_posts()) {
                        $wp_query->the_post();

                        $attachid = get_the_ID();

                        wp_reset_postdata();
                }

                $wp_query->wp_reset_query();

                if (isset($attachid)) return $attachid;       

                if (!$skip_rest) {
                        $url = WP_REST_API_IMPORT_BASE . '/media/'.$id;

                        $body = wp_rest_api_import_wp_remote_retrieve_body($url, __FUNCTION__, $id);
                        if (is_wp_error($body))
                                return call_user_func(__FUNCTION__, $id, $src, $alt, true);

                        if ((!$media_json = json_decode($body)))
                                return call_user_func(__FUNCTION__, $id, $src, $alt, true);

                        $src = $media_json->source_url;
                }

                require_once(__DIR__.DIRECTORY_SEPARATOR.'wp_insert_attachment_from_url.php');
                if (!$attachid = crb_insert_attachment_from_url($src))
                        return false;

                update_post_meta($attachid, 'wp_rest_api_import_prepare_media_id', $id);

                if (!empty($alt))
                        update_post_meta($attachid, '_wp_attachment_image_alt', $alt);

                return $attachid;
        }

Принудительная остановка рабочего процесса парсера после завершения текущей транзакции

Код:

        function die_if_wp_rest_api_import_task_is_expired() {
                if ($GLOBALS['job_timestamp'] != ($get_transient = wp_cache_get('wp_rest_api_import_job_timestamp', 'transient', true )))
                        wp_rest_api_import_die(__FUNCTION__, __LINE__, array('job_timestamp' => $GLOBALS['job_timestamp'], 'get_transient' => $get_transient));

                set_transient(__FUNCTION__, time());
        }



Загрузка...

Читайте на сайте

Другие проекты от 123ru.net








































Другие популярные новости дня сегодня


123ru.net — быстрее, чем Я..., самые свежие и актуальные новости Вашего города — каждый день, каждый час с ежеминутным обновлением! Мгновенная публикация на языке оригинала, без модерации и без купюр в разделе Пользователи сайта 123ru.net.

Как добавить свои новости в наши трансляции? Очень просто. Достаточно отправить заявку на наш электронный адрес mail@29ru.net с указанием адреса Вашей ленты новостей в формате RSS или подать заявку на включение Вашего сайта в наш каталог через форму. После модерации заявки в течении 24 часов Ваша лента новостей начнёт транслироваться в разделе Вашего города. Все новости в нашей ленте новостей отсортированы поминутно по времени публикации, которое указано напротив каждой новости справа также как и прямая ссылка на источник информации. Если у Вас есть интересные фото Вашего города или других населённых пунктов Вашего региона мы также готовы опубликовать их в разделе Вашего города в нашем каталоге региональных сайтов, который на сегодняшний день является самым большим региональным ресурсом, охватывающим все города не только России и Украины, но ещё и Белоруссии и Абхазии. Прислать фото можно здесь. Оперативно разместить свою новость в Вашем городе можно самостоятельно через форму.



Новости 24/7 Все города России




Загрузка...


Топ 10 новостей последнего часа






Персональные новости

123ru.net — ежедневник главных новостей Вашего города и Вашего региона. 123ru.net - новости в деталях, свежий, незамыленный образ событий дня, аналитика минувших событий, прогнозы на будущее и непредвзятый взгляд на настоящее, как всегда, оперативно, честно, без купюр и цензуры каждый час, семь дней в неделю, 24 часа в сутки. Ещё больше местных городских новостей Вашего города — на порталах News-Life.pro и News24.pro. Полная лента региональных новостей на этот час — здесь. Самые свежие и популярные публикации событий в России и в мире сегодня - в ТОП-100 и на сайте Russia24.pro. С 2017 года проект 123ru.net стал мультиязычным и расширил свою аудиторию в мировом пространстве. Теперь нас читает не только русскоязычная аудитория и жители бывшего СССР, но и весь современный мир. 123ru.net - мир новостей без границ и цензуры в режиме реального времени. Каждую минуту - 123 самые горячие новости из городов и регионов. С нами Вы никогда не пропустите главное. А самым главным во все века остаётся "время" - наше и Ваше (у каждого - оно своё). Время - бесценно! Берегите и цените время. Здесь и сейчас — знакомства на 123ru.net. . Разместить свою новость локально в любом городе (и даже, на любом языке мира) можно ежесекундно (совершенно бесплатно) с мгновенной публикацией (без цензуры и модерации) самостоятельно - здесь.



Загрузка...

Загрузка...

Экология в России и мире




Путин в России и мире

Лукашенко в Беларуси и мире



123ru.netмеждународная интерактивная информационная сеть (ежеминутные новости с ежедневным интелектуальным архивом). Только у нас — все главные новости дня без политической цензуры. "123 Новости" — абсолютно все точки зрения, трезвая аналитика, цивилизованные споры и обсуждения без взаимных обвинений и оскорблений. Помните, что не у всех точка зрения совпадает с Вашей. Уважайте мнение других, даже если Вы отстаиваете свой взгляд и свою позицию. Smi24.net — облегчённая версия старейшего обозревателя новостей 123ru.net.

Мы не навязываем Вам своё видение, мы даём Вам объективный срез событий дня без цензуры и без купюр. Новости, какие они есть — онлайн (с поминутным архивом по всем городам и регионам России, Украины, Белоруссии и Абхазии).

123ru.net — живые новости в прямом эфире!

В любую минуту Вы можете добавить свою новость мгновенно — здесь.






Здоровье в России и мире


Частные объявления в Вашем городе, в Вашем регионе и в России






Загрузка...

Загрузка...





Друзья 123ru.net


Информационные партнёры 123ru.net



Спонсоры 123ru.net