Добавить новость
123ru.net
Интернет
Август
2019

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

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

Был у меня клиент, который практически каждые 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 – это самые свежие новости из регионов и со всего мира в прямом эфире 24 часа в сутки 7 дней в неделю на всех языках мира без цензуры и предвзятости редактора. Не новости делают нас, а мы – делаем новости. Наши новости опубликованы живыми людьми в формате онлайн. Вы всегда можете добавить свои новости сиюминутно – здесь и прочитать их тут же и – сейчас в России, в Украине и в мире по темам в режиме 24/7 ежесекундно. А теперь ещё - регионы, Крым, Москва и Россия.


Загрузка...

Загрузка...

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




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

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



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

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

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

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






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


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






Загрузка...

Загрузка...





Друзья 123ru.net


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



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