Импорт блога с livejournal.com (ЖЖ)

Вопросы по работе Юпи! и отдельных модулей

Модератор: core team

Serge
Новенький
Сообщения: 7
Зарегистрирован: Пн фев 20, 2017 11:19 am

Импорт блога с livejournal.com (ЖЖ)

Сообщение Serge » Пн фев 20, 2017 12:07 pm

Добрый день! Пробуем yupe. Решили импортировать персональный блок с livejournal.com в сам yupe.

Вызывать импорт планируется один раз, поэтому пишем консольный вызов. Пробуем сделать примерно так:

1. Пишем класс LjimportCommand extends CConsoleCommand с функцией import. Кидаем в папку commands
2. Получаем данные с удаленного сервера. // код опущу, это не столь важно.
3. Приводим каждый элемент записи примерно к такому виду:

Код: Выделить всё

$model = new Post();         
// пример с одним элементом.
$post = new Array
(
   'itemid' => 795, // id  с внешнего сервера.
   'blog_id' => 1,
   'title' => 'Заголовок',
   'content' => 'Какое то описание',
   'publish_time' => '2017-01-23 11:29:00',
)
$model->setAttributes($post);
if ($model->save()) {
   echo 'Добавлена запись с itemid:' . $post['itemid'] . PHP_EOL;
}
else {
   echo 'Произошла ошибка при добавлении записи с itemid:' . $post['itemid'] .print_r($model->errors). PHP_EOL;
}


Получаем такую ошибку:

Код: Выделить всё

exception 'CException' with message 'CConsoleApplication and its behaviors do not have a method or closure named "getSession".' in /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/base/CComponent.php:266
Stack trace:
#0 /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/web/auth/CWebUser.php(199): CComponent->__call('getSession', Array)
#1 /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/web/auth/CWebUser.php(199): CConsoleApplication->getSession()
#2 /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/base/CModule.php(394): CWebUser->init()
#3 /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/base/CModule.php(103): CModule->getComponent('user')
#4 /home/www/xxxxxxxxx/htdocs/protected/modules/blog/models/Post.php(396): CModule->__get('user')
#5 /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/db/ar/CActiveRecord.php(1074): Post->beforeSave()
#6 /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/db/ar/CActiveRecord.php(809): CActiveRecord->insert(NULL)
#7 /home/www/xxxxxxxxx/htdocs/protected/commands/LjimportCommand.php(35): CActiveRecord->save()
#8 [internal function]: LjimportCommand->actionImport()
#9 /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/console/CConsoleCommand.php(172): ReflectionMethod->invokeArgs(Object(LjimportCommand), Array)
#10 /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/console/CConsoleCommandRunner.php(71): CConsoleCommand->run(Array)
#11 /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/console/CConsoleApplication.php(92): CConsoleCommandRunner->run(Array)
#12 /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/base/CApplication.php(185): CConsoleApplication->processRequest()
#13 /home/www/xxxxxxxxx/htdocs/protected/yiic.php(11): CApplication->run()


Есть вариант победить эту ситуацию не затрагивая код самого yupe?
"CConsoleApplication.user" is not defined.

Аватара пользователя
xoma
Администратор
Сообщения: 1957
Зарегистрирован: Ср авг 22, 2012 8:54 am
Контактная информация:

Re: Импорт блога с livejournal.com (ЖЖ)

Сообщение xoma » Пн фев 20, 2017 12:57 pm

Вы где-то в коде обращаетесь к Yii::app()->user или Yii::app()->session ?
отследить-посылку.рф - дружит с "Юпи!", следит за посылками!

Serge
Новенький
Сообщения: 7
Зарегистрирован: Пн фев 20, 2017 11:19 am

Re: Импорт блога с livejournal.com (ЖЖ)

Сообщение Serge » Пн фев 20, 2017 1:28 pm

Нет, конечно. Весь код представлен выше.
Это метод beforeSave модели Post к нему обращается.

Аватара пользователя
xoma
Администратор
Сообщения: 1957
Зарегистрирован: Ср авг 22, 2012 8:54 am
Контактная информация:

Re: Импорт блога с livejournal.com (ЖЖ)

Сообщение xoma » Пн фев 20, 2017 3:23 pm

Serge писал(а):Нет, конечно. Весь код представлен выше.
Это метод beforeSave модели Post к нему обращается.


Точно, это явные костыли (наши), вам придется поменять модельку на время импорта.
Или отнаследуйтесь от нашей модели, переопределите в ней метод beforeSave() и ее используйте при импорте.
отследить-посылку.рф - дружит с "Юпи!", следит за посылками!

Serge
Новенький
Сообщения: 7
Зарегистрирован: Пн фев 20, 2017 11:19 am

Re: Импорт блога с livejournal.com (ЖЖ)

Сообщение Serge » Пн фев 20, 2017 3:37 pm

Глушим beforeSave, получаем другую ошибку:

Код: Выделить всё

exception 'CDbException' with message 'CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`xxxxxxxxx`.`blog_post`, CONSTRAINT `fk_blog_post_create_user` FOREIGN KEY (`create_user_id`) REFERENCES `user_user` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION)' in /home/www/xxxxxxxxx/htdocs/vendor/yiisoft/yii/framework/db/CDbCommand.php:358


Есть вероятность победить?

Спасибо за участие. Странно, с этого форума не приходят на e-mail оповещения о новых ответах, хоть и "подписан" на тему.

Аватара пользователя
sabian
Ниндзя
Сообщения: 349
Зарегистрирован: Ср фев 18, 2015 8:34 pm
Откуда: Воронежская область
Контактная информация:

Re: Импорт блога с livejournal.com (ЖЖ)

Сообщение sabian » Пн фев 20, 2017 6:39 pm

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

Serge
Новенький
Сообщения: 7
Зарегистрирован: Пн фев 20, 2017 11:19 am

Re: Импорт блога с livejournal.com (ЖЖ)

Сообщение Serge » Пн фев 20, 2017 7:39 pm

sabian писал(а):Вам нужно указать айдишник пользователя, к которому будут привязаны записи


Вопрос как это сделать. Id пользователя при выполнении sql запроса наверное берется из текущего пользователя.
При попытке присвоить Yii::app()->user какое то значение, мы получаем ошибку "CConsoleApplication.user" is not defined.

Serge
Новенький
Сообщения: 7
Зарегистрирован: Пн фев 20, 2017 11:19 am

Re: Импорт блога с livejournal.com (ЖЖ)

Сообщение Serge » Пн фев 20, 2017 7:43 pm

А, понял! Нужно передать в setAttributes еще два значения create_user_id и update_user_id.
Спасибо.

Serge
Новенький
Сообщения: 7
Зарегистрирован: Пн фев 20, 2017 11:19 am

Re: Импорт блога с livejournal.com (ЖЖ)

Сообщение Serge » Ср фев 22, 2017 11:47 am

Сохранил код на всякий случай -- может кому пригодится: https://github.com/SergeKuznetsov/yupe-import-from-lj


Вернуться в «Вопросы и ответы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость