2014-12-12 3 views
0

Я выполнение этих строк:Я хотел бы, чтобы поймать изображение из RSS-канал

views.py

def pull_feed(feed_url, posts_to_show=5): 
    feed = feedparser.parse(feed_url) 
    posts = [] 
    for i in range(posts_to_show): 
     pub_date = feed['entries'][i].updated_parsed 
     published = date(pub_date[0], pub_date[1], pub_date[2]) 
     posts.append({ 
      'title': feed['entries'][i].title, 
      'summary': feed['entries'][i].summary, 
      'link': feed['entries'][i].link, 
      'content': feed['entries'][i].content, 
      'date': published, 
     }) 
    return {'posts': posts} 

my_template.html

 {% for post in posts.posts %} 
       <h3>{{ post.title }}</h3> 
       {{ post.content }} 
       <hr/> 
     {% endfor %} 

Но я хотел бы иметь что-то вроде post.image или поймать изображение (из блога RSS) из post.content, потому что он дает мне следующий результат :

[{'base': u'http://websiteexample.com/feed/', 'type': u'text/html', 'value': u'<p><a href="http://websiteexample.com/wp-content/uploads/2014/12/imageexample.png">}] 

Как я могу получить изображение из RSS? Я сохраню его в моей базе данных позже и сделаю что-то вроде пост-репликации.

ответ

2

вы можете использовать модуль повторно питона, чтобы разобрать первый URL в содержании «значение» поле, которое выглядит как изображение (то есть имеет расширение, как PNG/JPEG/JPG)

import re 

# inside your for i in range(posts_to_show) loop: 
value = feed['entries'][i].content[0]['value'] 
image_url = re.search('(?P<url>http?://[^\s]+(png|jpeg|jpg))', value).group("url") 

, то вы можете append image_url к вашему сообщению:

posts.append({ 
     'title': feed['entries'][i].title, 
     'summary': feed['entries'][i].summary, 
     'link': feed['entries'][i].link, 
     'content': feed['entries'][i].content, 
     'date': published, 
     'image_url': image_url, 
    }) 
+0

Что мне следует вводить в строке «значение»? потому что я получаю следующую ошибку: индексы списка должны быть целыми числами, а не str –

+0

Я обновил свой ответ, «значение» - это ключ в словаре, который вы получаете из post.content, пропустил ту часть, где словарь фактически находится в квадратных скобках, так что это на самом деле список словарей (или список с одним единственным словарем), поэтому нужно сверлить в этот индекс списка, чтобы получить значение «значение», так что это: post.content [0] ['value'] – brobas