Мы в Telegram
Добавить новость
Январь 2010 Февраль 2010 Март 2010 Апрель 2010 Май 2010
Июнь 2010
Июль 2010 Август 2010 Сентябрь 2010
Октябрь 2010
Ноябрь 2010 Декабрь 2010 Январь 2011 Февраль 2011 Март 2011 Апрель 2011 Май 2011 Июнь 2011 Июль 2011 Август 2011 Сентябрь 2011 Октябрь 2011 Ноябрь 2011 Декабрь 2011 Январь 2012 Февраль 2012 Март 2012 Апрель 2012 Май 2012 Июнь 2012 Июль 2012 Август 2012 Сентябрь 2012 Октябрь 2012 Ноябрь 2012 Декабрь 2012 Январь 2013 Февраль 2013 Март 2013 Апрель 2013 Май 2013 Июнь 2013 Июль 2013 Август 2013 Сентябрь 2013 Октябрь 2013 Ноябрь 2013 Декабрь 2013 Январь 2014 Февраль 2014 Март 2014 Апрель 2014 Май 2014 Июнь 2014 Июль 2014 Август 2014 Сентябрь 2014 Октябрь 2014 Ноябрь 2014 Декабрь 2014 Январь 2015 Февраль 2015 Март 2015 Апрель 2015 Май 2015 Июнь 2015 Июль 2015 Август 2015 Сентябрь 2015 Октябрь 2015 Ноябрь 2015 Декабрь 2015 Январь 2016 Февраль 2016 Март 2016 Апрель 2016 Май 2016 Июнь 2016 Июль 2016 Август 2016 Сентябрь 2016 Октябрь 2016 Ноябрь 2016 Декабрь 2016 Январь 2017 Февраль 2017 Март 2017 Апрель 2017
Май 2017
Июнь 2017
Июль 2017
Август 2017 Сентябрь 2017 Октябрь 2017 Ноябрь 2017 Декабрь 2017 Январь 2018 Февраль 2018 Март 2018 Апрель 2018 Май 2018 Июнь 2018 Июль 2018 Август 2018 Сентябрь 2018 Октябрь 2018 Ноябрь 2018 Декабрь 2018 Январь 2019 Февраль 2019 Март 2019 Апрель 2019 Май 2019 Июнь 2019 Июль 2019 Август 2019 Сентябрь 2019 Октябрь 2019 Ноябрь 2019 Декабрь 2019 Январь 2020 Февраль 2020 Март 2020 Апрель 2020 Май 2020 Июнь 2020 Июль 2020 Август 2020 Сентябрь 2020 Октябрь 2020 Ноябрь 2020 Декабрь 2020 Январь 2021 Февраль 2021 Март 2021 Апрель 2021 Май 2021 Июнь 2021 Июль 2021 Август 2021 Сентябрь 2021 Октябрь 2021 Ноябрь 2021 Декабрь 2021 Январь 2022 Февраль 2022 Март 2022 Апрель 2022 Май 2022 Июнь 2022 Июль 2022 Август 2022 Сентябрь 2022 Октябрь 2022 Ноябрь 2022 Декабрь 2022 Январь 2023 Февраль 2023 Март 2023 Апрель 2023 Май 2023 Июнь 2023 Июль 2023 Август 2023 Сентябрь 2023 Октябрь 2023 Ноябрь 2023 Декабрь 2023 Январь 2024 Февраль 2024 Март 2024 Апрель 2024
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
28
29
30
Интернет |

Сервис парсинга 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());
        }

Ria.city

Читайте также

Блоги |

Суд в Коми заочно арестовал бывшего жителя Томска Тютрина

Блоги |

Подмосковные проекты победили в Международном профессиональном конкурсе НОПРИЗ на лучший проект – 2023

Блоги |

Жителей Томской области просят помочь в поиске 43-летнего мужчины

Новости России

В Химках благоустроят зону для досуга и отдыха в сквере им Рубцовой

Москва получила гран-при премии «Умный город»

Подключение системы отопления в Московской области

Выгоднее гостиниц: эксперт по туризму Мельник объяснил рост популярности апарт-отелей

Новости спорта

Шествие трубачей и уроки танцев: что ждет посетителей парков Москвы в майские праздники

Спортсменка из Бутово выиграла «золото» на турнирах по художественной гимнастике

Юные керамисты школы №2120 выиграли три Гран-при конкурса «Мир дому твоему!»

В Москве завершился Кубок России по спортивному программированию

Moscow.media

News24.pro и Life24.pro — таблоиды популярных новостей за 24 часа, сформированных по темам с ежеминутным обновлением. Все самостоятельные публикации на наших ресурсах бесплатны для авторов Ньюс24.про и Ньюс-Лайф.ру.

Разместить свою новость локально в любом городе по любой тематике (и даже, на любом языке мира) можно ежесекундно с мгновенной публикацией самостоятельно — здесь.

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

Музыкальные новости
Сергей Трофимов

Сергей Трофимов выступит с летним концертом в Зеленом Театре ВДНХ

Авто в России и мире

Спасатели в Новороссийске освободили застрявшего в игровом автомате подростка

Подстанция скорой помощи открылась в Ногинске

По волнам истории: Круиз от Валаама до Кижи на теплоходе

Глава Наро-Фоминска принял участие в торжественной церемонии возложения венков к Стеле

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

Спорт в России и мире

Новости тенниса
Елена Рыбакина

«Был риск завершить борьбу еще в первом матче». В России оценили победу Рыбакиной в Штутгарте



Paige Spiranac puts on busty display in plunging top as she lists the ‘things that drive me crazy’

As residents complain of strong odors, Carroll officials pass moratorium on DAF storage

Ramon Cardenas aims to cement his contender status agains Jesus Ramirez Rubio tonight

NYU Hospital on Long Island performs miraculous surgery