8

我正在尝试将我所有的 Livejournal 帖子复制到我在 blogger.com 上的新博客。我通过使用gdata python 客户端附带的稍微修改的示例来做到这一点。我有一个 json 文件,其中包含从 Livejournal 导入的所有帖子。问题是 blogger.com 有每天发布新博客条目的每日限制 - 50,所以你可以想象我的 1300 多个帖子将在一个月内被复制,因为我无法在 50 次导入后以编程方式输入验证码。

最近得知gdata的某处也有批处理模式,但是不知道怎么用。谷歌搜索并没有真正帮助。

任何建议或帮助将不胜感激。

谢谢。

更新

以防万一,我使用以下代码

#!/usr/local/bin/python
import json
import requests

from gdata import service
import gdata
import atom
import getopt
import sys

from datetime import datetime as dt
from datetime import timedelta as td
from datetime import tzinfo as tz

import time

allEntries = json.load(open("todays_copy.json", "r"))

class TZ(tz):
    def utcoffset(self, dt): return td(hours=-6)

class BloggerExample:
    def __init__(self, email, password):
        # Authenticate using ClientLogin.
        self.service = service.GDataService(email, password)
        self.service.source = "Blogger_Python_Sample-1.0"
        self.service.service = "blogger"
        self.service.server = "www.blogger.com"
        self.service.ProgrammaticLogin()

        # Get the blog ID for the first blog.
        feed = self.service.Get("/feeds/default/blogs")
        self_link = feed.entry[0].GetSelfLink()
        if self_link:
            self.blog_id = self_link.href.split("/")[-1]

    def CreatePost(self, title, content, author_name, label, time):
        LABEL_SCHEME = "http://www.blogger.com/atom/ns#"
        # Create the entry to insert.
        entry = gdata.GDataEntry()
        entry.author.append(atom.Author(atom.Name(text=author_name)))
        entry.title = atom.Title(title_type="xhtml", text=title)
        entry.content = atom.Content(content_type="html", text=content)
        entry.published = atom.Published(time)
        entry.category.append(atom.Category(scheme=LABEL_SCHEME, term=label))

        # Ask the service to insert the new entry.
        return self.service.Post(entry, 
            "/feeds/" + self.blog_id + "/posts/default")

    def run(self, data):
        for year in allEntries:
            for month in year["yearlydata"]:
                for day in month["monthlydata"]:
                    for entry in day["daylydata"]:
                        # print year["year"], month["month"], day["day"], entry["title"].encode("utf-8")
                        atime = dt.strptime(entry["time"], "%I:%M %p")
                        hr = atime.hour
                        mn = atime.minute
                        ptime = dt(year["year"], int(month["month"]), int(day["day"]), hr, mn, 0, tzinfo=TZ()).isoformat("T")
                        public_post = self.CreatePost(entry["title"],
                            entry["content"],
                            "My name",
                            ",".join(entry["tags"]),
                            ptime)
                        print "%s, %s - published, Waiting 30 minutes" % (ptime, entry["title"].encode("utf-8"))
                        time.sleep(30*60)


def main(data):
    email = "my@email.com"
    password = "MyPassW0rd"

    sample = BloggerExample(email, password)
    sample.run(data)

if __name__ == "__main__":
    main(allEntries)
4

2 回答 2

13

我建议改用 Google 博客转换器(https://code.google.com/archive/p/google-blog-converters-appengine/

要开始,您必须通过

https://github.com/google/gdata-python-client/blob/master/INSTALL.txt - 设置 Google GData API 的步骤 https://github.com/pra85/google-blog-converters-appengine/blob /master/README.txt - 使用博客转换器的步骤

完成所有设置后,您必须运行以下命令(其 LiveJournal 用户名和密码)

livejournal2blogger.sh -u <username> -p <password> [-s <server>]

将其输出重定向到 .xml 文件。现在可以通过转到 Blogger 仪表板、您的博客 >设置>其他>博客工具>导入博客直接将该文件导入 Blogger博客

在这里记得检查自动发布所有导入的帖子和页面选项。我之前曾在一个包含 400 多个帖子的博客上尝试过此操作,并且 Blogger 确实成功导入并发布了它们而没有问题

如果您怀疑 Blogger 可能存在一些问题(因为帖子数量非常多),或者您的帐户中有其他 Blogger 博客。然后为了预防起见,创建一个单独的 Blogger (Google) 帐户,然后尝试导入帖子。之后,您可以将管理员控制权转移到您的真实 Blogger 帐户(要转移,您首先必须发送作者邀请,然后将您的真实 Blogger 帐户提升到管理员级别,最后删除虚拟帐户。发送邀请的选项位于设置 > 基本 > 权限 > 博客作者)

还要确保您使用的是 Python 2.5,否则这些脚本将无法运行。在运行 livejournal2blogger.sh 之前,更改以下行(感谢 Michael Fleet 修复此问题http://michael.f1337.us/2011/12/28/google-blog-converters-blogger2wordpress/

PYTHONPATH=${PROJ_DIR}/lib python ${PROJ_DIR}/src/livejournal2blogger/lj2b.py $*

PYTHONPATH=${PROJ_DIR}/lib python2.5 ${PROJ_DIR}/src/livejournal2blogger/lj2b.py $*

PS我知道这不是您问题的答案,但由于此答案的目标与您的问题相同(一天导入超过 50 个帖子),这就是我分享它的原因。我对 Python 或 GData API 了解不多,我设置了环境并按照这些步骤回答了这个问题(并且我能够使用它将帖子从 LiveJournal 导入到 Blogger)。

于 2014-09-03T08:34:56.300 回答
7
# build feed
request_feed = gdata.base.GBaseItemFeed(atom_id=atom.Id(text='test batch'))
# format each object 
entry1 = gdata.base.GBaseItemFromString('--XML for your new item goes here--')
entry1.title.text = 'first batch request item'
entry2 = gdata.base.GBaseItemFromString('--XML for your new item here--')
entry2.title.text = 'second batch request item'

# Add each blog item to the request feed 
request_feed.AddInsert(entry1)
request_feed.AddInsert(entry2)

# Execute the batch processes through the request_feed (all items)
result_feed = gd_client.ExecuteBatch(request_feed)
于 2014-08-29T17:02:31.437 回答