我正在创建一个脚本来从 rss 提要中获取帖子并将它们放入我的数据库中。我将使用 3-5 个不同的提要执行此操作,然后无论它们来自哪个提要,我都会按日期顺序将它们打印出来。其中一些工作正常,比如我可以使用 simplepie 从文件中获取 rss 数据,但我似乎无法将其添加到数组中(微不足道的部分)。
get_title() 中的数据以“SimplePie_Item”的形式返回,而不仅仅是一个字符串“不能将 SimplePie_Item 类型的对象用作数组”。如果我尝试回显数据,它会很好地打印字符串。所以我认为这里的对象数据我没有得到一些东西,比如为什么我不能只将字符串复制到数组中。我尝试铸造,但这似乎没有做任何事情。
--update_database 方法代码--
function update_database($options=array())
{
//Check required fields.
if(!$this->_required(array('feeds','life'),$options))
return false;
//Add default values
$options = $this->_default(array() ,$options);
if(is_array($options['feeds'])) //Multiple blogs
{
echo '是一个数组';
//Parse each url and add to db.
foreach($options['feeds'] as $a => $u)
{
echo '打印 r =
';print_r($u);echo '';
echo 'feeds loop = '.$a;
echo 'url = '.$u['url'].'<br />';
$posts = $this->fetch_feed( array('url'=>$u['url']) );
//Add to db.
foreach($posts as $f)
{
$add['post_title'] = (string)$f->get_title();
$add['link'] = (string)$f->get_link();
$add['p_description'] = (string)$f->get_description();
$add['content'] = (string)$f->get_content();
$add['post_date'] = (string)$f->get_date();
$add['guid'] = (string)$f->get_id();
$add['status'] = 'active';
$add['blog_id'] = $u['blog_id'];
$this->add_post($f);//Add posts to db.
}
}
}
else //Single blog.
{
echo 'feeds - single feed';
$posts = $this->fetch_feed( array('url'=>$options['url']) );
//Add to db.
foreach($posts as $k=>$f)
{
$add['post_title'] = (string)$f->get_title();
$add['link'] = (string)$f->get_link();
$add['p_description'] = (string)$f->get_description();
$add['content'] = (string)$f->get_content();
$add['post_date'] = (string)$f->get_date();
$add['guid'] = (string)$f->get_id();
$add['status'] = 'active';
$add['blog_id'] = $options['blog_id'];
$this->add_post($f);//Add posts to db.
}
}
}
--fetch_feed 方法--
function fetch_feed($options=array())
{
$this->simplepie->set_feed_url($options['url']);
$this->simplepie->set_cache_location(APPPATH.'cache/rss');
$this->simplepie->init();
$this->simplepie->handle_content_type();
return $this->simplepie->get_items();
}
--add_post 方法--
function add_post($options)
{
//Check required options.
if(!$this->_required(array('post_title','link','p_description','content','post_date','guid','status','blog_id'), $options))
return false;
//Add default values
$options = $this->_default(array() ,$options);
$this->db->set('post_title',$options['title']);
$this->db->set('link',$options['link']);
$this->db->set('p_description',$options['description']);
$this->db->set('content',$options['content']);
$this->db->set('post_date',$options['post_date']);
$this->db->set('guid',$options['guid']);
$this->db->set('status',$options['status']);
$this->db->set('blog_id',$options['blog_id']);
$this->db->insert('posts');
return $this->db->affected_rows();
}
- 控制器 -
function simple_pie()
{
$this->load->model('post_model');
//$this->options->feeds = $this->post_model->fetch_feed(array('url'=>'http://testigniter.blogspot.com/feeds/posts/default?alt=rss'));
$urls = array('feeds'=>array( array('url'=>'http://testigniter.blogspot.com/feeds/posts/default?alt=rss','blog_id'=>1) ),'life'=>60);
$this->options->result = $this->post_model->update_database($urls);
if($this->options->result)
{
echo 'Passed';
}
else
{
echo 'Failed';
}
$this->load->view('pages/simplepie_test', $this->options);
}
这里真的不需要视图。