Перейти к содержимому


Фотография
- - - - -

Парсинг. Сохранение записей в БД мимо ZOO.


  • Закрытая тема Тема закрыта
Сообщений в теме: 2

#1 inte

inte

Отправлено 18 January 2013 - 07:55

Здравствуйте!
Задался я идеей парсинга. Решил парсить данные напрямую в БД. Настроил парсер, написал код принимающий POST данные и отправляющий полученные данные в шаблоне таблицы #_zoo_item
<?php

$foo = $_POST[alias];
$cdate = date("Y-m-d H:i:s");
$getimage = $_POST[image];
$img = str_replace('/','\/',$getimage);
$text = $_POST[video];
$video = str_replace('%26amp-','&',$text);
$duration = $_POST[long];
$actors = $_POST[cast];
$description = $_POST[desc];
$categories = $_POST[cat];

$content = ' {\n	"d8c08f2f-b054-4596-a83f-dca11b51d239":  {\n		"0":  {\n			"file": "'.$img.'",\n			"title": "'$_POST[name]'",\n			"link": "",\n			"target": "0",\n			"rel": ""\n		}\n	},\n	"1be02372-4f00-4841-824e-617a0d52a9dc":  {\n		"0":  {\n			"value": "<p>'.$foo.'<\\/p>"\n		}\n	},\n	"b35faeaf-0df9-4e74-8b8f-23faeec83b67":  {\n		"0":  {\n			"value": "'.$video.'"\n		}\n	},\n	"57251f90-ab42-4219-ae6c-01db17bb6ce5":  {\n		"0":  {\n			"value": "'.$duration.'"\n		}\n	},\n	"c7db7e65-2fec-4f07-a4b9-d2c271d7cfdd":  {\n		"0":  {\n			"value": "'.$foo.'"\n		}\n	},\n	"ef6647fa-456b-4fce-b451-fe45bcdb2d9f":  {\n\n	},\n	"03a2cd4a-1c44-439e-806e-934e6e5a04d9":  {\n		"value": "1"\n	},\n	"befe9115-54d0-4b34-9b50-c0d0ed6630c9":  {\n		"0":  {\n			"value": "'.$foo.'"\n		}\n	}\n}';

$params = ' {\n	"metadata.title": "",\n	"metadata.description": "",\n	"metadata.keywords": "",\n	"metadata.robots": "",\n	"metadata.author": "",\n	"config.enable_comments": "1",\n	"config.primary_category": "9"\n}';

$db = mysql_connect("localhost", "db_user", "db_pass");
mysql_select_db("db_name");
mysql_query("SET NAMES utf8");
mysql_query("INSERT INTO qpoqp_zoo_item (id, application_id, type, name, alias, created, modified, modified_by, publish_up, publish_down, priority, hits, state, access, created_by, created_by_alias, searchable, elements, params) VALUES 
(LAST_INSERT_ID(), 1, 'porno', '$_POST[name]', '$_POST[alias]', '$cdate', '$cdate', 860, '$cdate', '0000-00-00 00:00:00', 0, 1, 1, 1, 860, '', 1, '$content', '$params')");

?>
В коде в некоторых местах установлены переменные для теста.

В результате все данные отлично парсятся, сохраняясь в БД (правда не в JSON, а не конвертированном UTF-8, что, как показывает практика не проблема для ZOO - строки отлично обрабатываются).

Но оказалась проблема - если открывать записи в админке, то из созданного элемента остаются только название и алиас. Всё остальное начисто пропадает. Очищается в БД. Ума не приложу из-за чего. Проверяя все возможные причины пробовал вносить данные латиницей, не помогло.

Прошу знающих помочь разобраться в проблеме.
Заранее благодарен!
  • 0

#2 voland

voland

Отправлено 18 January 2013 - 14:42

Вставляйте json_encode($content)
  • 0

#3 SmetDenis

SmetDenis

Отправлено 18 January 2013 - 17:02

Так делать нельзя. В вашем коде практически все не верно.
Нужно использовать API Zoo - /administrator/components/com_zoo/tables/item.php метод save()
Пример использования посмотрите тут - /components/com_zoo/controllers/submission.php метод save()

В вашем случае не будет работать поиск (даже после переиндексации не факт что все встанет на свои места).
Не учитывается окружение, часовые пояса, не срабатывают триггеры Zoo и JBZoo,
кодировка, формат данных, нет никакой валидации. Итд итп...

Я бы не рисковал так на реальном контенте.
Зачем вам этот костыль?
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.





Click to return to top of page in style!