2011-05-06 2 views
2
여기

내가 파이썬에서 수행 할 작업입니다 : python에서 atom/rss 피드를 수정하는 방법은 무엇입니까?

  1. 는 이렇게 수정 된 피드를

Feedparser를 다시 게시 피드에 데이터를 추가

  • 공급을

    좋은 일을 구문 분석시에는 FeedParserDict 개체에서 XML 문서를 작성하는 방법을 제공하지 않는 것 같습니다.

    내 자신의 작곡 기능을 작성하는 간단한 방법이 있습니까?

  • 답변

    2

    나는 장고 템플릿 엔진을 사용하여, 내 자신의 아톰 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>