Парсинг RSS-канала в php и дамп в sql

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

любая помощь или совет будут оценены.

    $db = mysql_connect($db_hostname,$db_username,$db_password);
if (!$db)
{
    die("Could not connect: " . mysql_error());
}
.....snip.............

РЕДАКТИРОВАТЬ №1:

изучение скрипта простой пирог и его кеширование. будет обновлено, должно быть решено сегодня вечером.

РЕДАКТИРОВАТЬ № 2: SQL-запрос, который был изменен, чтобы включить описание и снимок экрана для содержимого таблицы.

CREATE TABLE rss ( ............snip........................

введите описание изображения здесь

РЕДАКТИРОВАТЬ № 3: спасибо, Роберт, за поправку, да, это была быстрая копия и вставка из исходного скрипта, без правильной инициализации запроса. Я обновил sql-запрос и все исправил, но теперь модифицированный скрипт требует больше сока, получая ссылку на изображение вместе с сообщением. Я использую xpath для получения каждой ссылки на изображение публикации, но не могу включить соответствующее изображение в каждый дамп строки. оба сценария отлично работают на своих индивидуальных площадках, но мне нужна дополнительная помощь в их объединении.

        require_once("./config.php");

    .......snip................

РЕДАКТИРОВАТЬ # 4: ну, это не сработало, мне удалось обновить существующую таблицу другим скриптом Я поддержал ваш ответ, но не принял его как правильный ответ по этой причине. Возможно, я не смог правильно объяснить, но мой сценарий работает как шарм, и ему просто не хватает CSS. хотя спасибо за вашу помощь

ПРИМЕЧАНИЕ: Я вырезал оригинальные скрипты из поста /

вы заставили echo $ item_insert_sql посмотреть, как выглядит фактический запрос?

Robert Sinclair 24.05.2018 04:09

исходное сообщение отредактировано

kevin 24.05.2018 04:21

если у вас есть более одного изображения на сообщение, я предлагаю создать новую таблицу под названием «изображения», которая связана с основной таблицей через какой-то уникальный столбец (например, item_id). В противном случае я не уверен, как вы можете аккуратно вставить несколько изображений в одну строку

Robert Sinclair 25.05.2018 04:44

есть идеи о вставке одного изображения с каждым элементом?

kevin 25.05.2018 04:54

Я обновлю ответ

Robert Sinclair 25.05.2018 04:59

сработало ли обновление в исходном ответе?

Robert Sinclair 25.05.2018 23:17

честно говоря, это не сработало, однако мне удалось заставить его работать, обновив существующую таблицу другим скриптом. Я поддержал ваш ответ, но не принял его как правильный ответ. возможно, я не смог объяснить должным образом, но мой сценарий работает как шарм, и ему просто не хватает CSS, хотя спасибо за вашу помощь

kevin 28.05.2018 06:25

хорошо .. эта часть скрипта (которую вы отрезали) хранит изображения внутри массива $ image (который является третьим параметром встроенной функции preg_match). Так что я не уверен, как это не сработало для вас. $ has_image = preg_match ('/ <img. + src = [\' "] (? P <src>. +?) [\ '"]. *> / i', $ RSSitem, $ image); попробуйте выполнить <pre> print_r ($ images) </pre> сразу после этого, и вы увидите. Так что это определенно правильный ответ ... в любом случае все хорошо

Robert Sinclair 28.05.2018 18:45

очень признателен и спасибо за мотивацию в том, чтобы больше копать этот проект и заставить его работать

kevin 29.05.2018 12:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На вашем скриншоте отсутствует информация в столбцах «item_enclosure» и «item_status», остальное заполнено.

Проблема в том, что ваш запрос не пытается вставить эти недостающие записи.

        $item_insert_sql = "INSERT INTO rssingest(item_id, feed_url, item_title, item_date, item_description, item_url, fetch_date) VALUES ('" . $item_id . "', '" . $feed_url . "', '" . $item_title . "', '" . $item_date . "', '" . $item_description . "', '" . $item_url . "', '" . $fetch_date . "')";

^ Никогда не будет вставлять "item_enclosure" и "item_status", поскольку 2 столбца не являются частью запроса вставки ...

Вам нужно будет извлечь 2 недостающих элемента и изменить запрос на вставку, чтобы:

        $item_insert_sql = "INSERT INTO rssingest(item_id, feed_url, item_title, item_date, item_description, item_url, fetch_date, item_enclosure, item_status) VALUES ('" . $item_id . "', '" . $feed_url . "', '" . $item_title . "', '" . $item_date . "', '" . $item_description . "', '" . $item_url . "', '" . $fetch_date . "', '" . $item_enclosure . "', '" . $item_status . "')";

Сначала вам нужно определить:

  • $ item_enclosure
  • $ item_status

Кстати, запрос, который вы вставили в обновленный ответ, неверен, он должен начинаться с «INSERT INTO», а не «CREATE TABLE», вы не повторяете правильный запрос.

Обновлено:

В вашем исходном коде есть эта строка

$has_image = preg_match('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $RSSitem, $image);

Итак, прямо сейчас, если ваш код находит изображение, он должен поместить его в массив с именем $ image

Попробуйте print_r из $ image, чтобы увидеть, в каком элементе массива он хранится, я думаю, это будет $ image [0] [0] или $ image [0]

Поэтому сделайте следующее, чтобы определить URL-адрес изображения (я предполагаю, что это $ image [0] [0], но на всякий случай дважды проверьте):

$img_url = (isset($image)) ? $image[0][0] : "";

Затем вам нужно обновить запрос на вставку (я не знаю, какое имя столбца используется для изображения, поэтому это просто пример):

    $item_insert_sql = "INSERT INTO rssingest(item_id, feed_url, item_title, item_date, item_description, item_url, fetch_date, item_enclosure, item_status, image_column) VALUES ('" . $item_id . "', '" . $feed_url . "', '" . $item_title . "', '" . $item_date . "', '" . $item_description . "', '" . $item_url . "', '" . $fetch_date . "', '" . $item_enclosure . "', '" . $item_status . "', '" . $img_url . "')";

спасибо, Роберт, что поправил меня, да, это была быстрая копия и вставка из исходного сценария, и у него нет правильного инициализации запроса.

kevin 25.05.2018 02:34

@kevin без проблем, если ответ правильный, не стесняйтесь нажимать "принять"

Robert Sinclair 25.05.2018 04:40

Другие вопросы по теме