내가 파이썬에서 수행 할 작업입니다 : python에서 atom/rss 피드를 수정하는 방법은 무엇입니까?
- 는
- 는 이렇게 수정 된 피드를
Feedparser를 다시 게시 피드에 데이터를 추가
FeedParserDict
개체에서 XML 문서를 작성하는 방법을 제공하지 않는 것 같습니다. 내 자신의 작곡 기능을 작성하는 간단한 방법이 있습니까?
내가 파이썬에서 수행 할 작업입니다 : python에서 atom/rss 피드를 수정하는 방법은 무엇입니까?
Feedparser를 다시 게시 피드에 데이터를 추가
FeedParserDict
개체에서 XML 문서를 작성하는 방법을 제공하지 않는 것 같습니다. 내 자신의 작곡 기능을 작성하는 간단한 방법이 있습니까?
나는 장고 템플릿 엔진을 사용하여, 내 자신의 아톰 1.0 시리얼을 썼다. 단지, 그래서 아무것도 당신이 FeedParserDict
를 공급
import feedparser
from django.template import Template
d = feedparser.parse("http://example.com/feed.xml") # creating a FeedParserDict
# ... do stuff with d
t = Template(the_stuff_below) # compiling the template
output_atom_document = t.render(d)
하는 feedparser의 위생 작업이 feedparser.parse()
에 의해 수행되는 것을주의 :이 다른 사람에 의해 재사용 할 수 있도록 나는 가능한 한 완전한 만드는 여분의 마일을 갔다 필요한 경우 사전에 소독해야합니다.
피드를 수정하는 데이 피드를 사용하려면 id 값을 고유해야하므로 id 값 (피드 별, 항목 별)을 변경해야합니다.
<?xml version="1.0" encoding="{{ encoding }}"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title type="{{ feed.title_detail.type }}" xml:lang="{{ feed.title_detail.language }}" xml:base="{{ feed.title_detail.base }}">{{ feed.title|escape }}</title>
{% for link in feed.links %}
<link rel="{{ link.rel }}" type="{{ link.type }}" href="{{ link.href }}" title="{{ link.title }}"/>
{% endfor %}
<subtitle type="{{ feed.subtitle_detail.type }}" xml:lang="{{ feed.subtitle_detail.language }}" xml:base="{{ feed.subtitle_detail.base }}">{{ feed.subtitle|escape }}</subtitle>
<rights type="{{ feed.rights_detail.type }}" xml:lang="{{ feed.rights_detail.language }}" xml:base="{{ feed.rights_detail.base }}">{{ feed.rights|escape }}</rights>
<generator uri="{{ feed.generator_detail.href }}" version="{{ feed.generator_detail.version }}">{{ feed.generator }}</generator>
<info type="{{ feed.info_detail.type }}" xml:lang="{{ feed.info_detail.language }}" xml:base="{{ feed.info_detail.base }}">{{ feed.info|escape }}</info>
<updated>{{ feed.updated }}</updated>
<id>{{ feed.id }}</id>
<author>
<name>{{ feed.author }}</name>
<uri>{{ feed.author_detail.href }}</uri>
<email>{{ feed.author_detail.email }}</email>
</author>
{% for contributor in feed.contributors %}
<contributor>
<name>{{ contributor }}</name>
<uri>{{ contributor_detail.href }}</uri>
<email>{{ contributor_detail.email }}</email>
</contributor>
{% endfor %}
<image>
<title>{{ feed.image.title }}</title>
<url>{{ feed.image.href }}</url>
<link>{{ feed.image.link }}</link>
<width>{{ feed.image.width }}</width>
<height>{{ feed.image.height }}</height>
<description>{{ feed.image.description }}</description>
</image>
<icon>{{ feed.icon }}</icon>
<!-- not part of Atom 1.0: feed.textinput -->
<!-- not part of Atom 1.0: feed.cloud -->
<publisher>
<name>{{ feed.publisher }}</name>
<uri>{{ feed.publisher_detail.href }}</uri>
<email>{{ feed.publisher_detail.email }}</email>
</publisher>
{% for tag in feed.tags %}
<tag>
<term>{{ tag.term }}</term>
<scheme>{{ tag.scheme }}</scheme>
<label>{{ tag.label }}</label>
</tag>
{% endfor %}
<language>{{ feed.language }}</language>
<!-- not part of Atom 1.0: feed.license -->
<!-- not part of Atom 1.0: feed.errorreportsto -->
{% for entry in entries %}
<entry>
<title type="{{ entry.title_detail.type }}" xml:lang="{{ entry.title_detail.language }}" xml:base="{{ entry.title_detail.base }}">{{ entry.title|escape }}</title>
{% for link in entry.links %}
<link rel="{{ link.rel }}" type="{{ link.type }}" href="{{ link.href }}" title="{{ link.title }}"/>
{% endfor %}
<summary type="{{ entry.summary_detail.type }}" xml:lang="{{ entry.summary_detail.language }}" xml:base="{{ entry.summary_detail.base }}">{{ entry.summary|escape }}</summary>
{% for content in entry.content %}
<content type="{{ content.type }}" xml:lang="{{ content.language }}" xml:base="{{ content.base }}">{{ content.value|escape }}</content>
{% endfor %}
<published>{{ entry.published }}</published>
<updated>{{ entry.updated }}</updated>
<created>{{ entry.created }}</created>
<!-- not part of Atom 1.0: entry.expired -->
<id>{{ entry.id }}</id>
<author>
<name>{{ entry.author }}</name>
<uri>{{ entry.author_detail.href }}</uri>
<email>{{ entry.author_detail.email }}</email>
</author>
{% for contributor in entry.contributors %}
<contributor>
<name>{{ contributor }}</name>
<uri>{{ contributor_detail.href }}</uri>
<email>{{ contributor_detail.email }}</email>
</contributor>
{% endfor %}
{% for enclosure in entry.enclosures %}
<link rel="enclosure" href="{{ enclosure.href }}" length="{{ enclosure.length }}" type="{{ enclosure.type }}"/>
{% endfor %}
<publisher>
<name>{{ entry.publisher }}</name>
<uri>{{ entry.publisher_detail.href }}</uri>
<email>{{ entry.publisher_detail.email }}</email>
</publisher>
{% for tag in entry.tags %}
<tag>
<term>{{ tag.term }}</term>
<scheme>{{ tag.scheme }}</scheme>
<label>{{ tag.label }}</label>
</tag>
{% endfor %}
<source>
<author>
<name>{{ entry.source.author }}</name>
<uri>{{ entry.source.author_detail.href }}</uri>
<email>{{ entry.source.author_detail.email }}</email>
</author>
{% for contributor in entry.source.contributors %}
<contributor>
<name>{{ contributor }}</name>
<uri>{{ contributor_detail.href }}</uri>
<email>{{ contributor_detail.email }}</email>
</contributor>
{% endfor %}
<icon>{{ entry.source.icon }}</icon>
<id>{{ entry.source.id }}</id>
{% for link in entry.source.links %}
<link rel="{{ link.rel }}" type="{{ link.type }}" href="{{ link.href }}" title="{{ link.title }}"/>
{% endfor %}
<logo>{{ entry.source.logo }}</logo>
<rights type="{{ entry.source.rights_detail.type }}" xml:lang="{{ entry.source.rights_detail.language }}" xml:base="{{ entry.source.rights_detail.base }}">{{ entry.source.rights|escape }}</rights>
<subtitle type="{{ entry.source.subtitle_detail.type }}" xml:lang="{{ entry.source.subtitle_detail.language }}" xml:base="{{ entry.source.subtitle_detail.base }}">{{ entry.source.subtitle|escape }}</subtitle>
<title type="{{ entry.source.title_detail.type }}" xml:lang="{{ entry.source.title_detail.language }}" xml:base="{{ entry.source.title_detail.base }}">{{ entry.source.title|escape }}</title>
<updated>{{ entry.source.updated }}</updated>
</source>
<!-- not part of Atom 1.0: entry.comments -->
<!-- not part of Atom 1.0: entry.license -->
</entry>
{% endfor %}
<!-- meaningless: version (this is Atom 1.0) -->
<!-- meaningless: namespaces (namespace set to "http://www.w3.org/2005/Atom" in the <feed> tag) -->
<!-- somewhere else: encoding (in the XML declaration) -->
<!-- meaningless: status (HTTP status) -->
<!-- meaningless: href (present if server redirect when fetching the original feed) -->
<!-- meaningless: etag (part of HTTP headers) -->
<!-- meaningless: modified (part of HTTP headers) -->
<!-- meaningless: headers (HTTP headers) -->
<!-- meaningless: bozo (set to 1 if not well-formed XML) -->
<!-- meaningless: bozo_exception -->
</feed>
lxml을 사용하거나 Python 템플릿 라이브러리로 직접 작성할 수 있습니다.