我试图将所有Livejournal帖子复制到blogger.com上的新博客。我是通过使用example附带的略微修改的gdata python client来实现的。我有一个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)
答案 0 :(得分:15)
我建议改用Google Blog转换器(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信息中心,您的博客&gt;直接将此文件导入Blogger博客。 设置&gt; 其他&gt; 博客工具&gt; 导入博客
此处请记得检查自动发布所有导入的帖子和页面选项。之前我曾经尝试过一次有超过400个帖子的博客,Blogger成功导入了这个帖子。发布它们没有问题
如果您怀疑Blogger可能会遇到一些问题(因为帖子数量很高),或者您的帐户中有其他Blogger博客。然后,为了预防起见,请创建一个单独的Blogger(Google)帐户,然后尝试导入帖子。之后,您可以将管理控制转移到您真正的Blogger帐户(要转移,您首先必须发送作者邀请,然后将您真实的Blogger帐户提升到管理员级别,最后删除虚拟帐户。发送邀请的选项出现在设置&gt;基本&gt;权限&gt;博客作者)
另外请确保您使用的是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 $*
P.S。我知道这不是你问题的答案,但是因为这个答案的目标与你的问题相同(要在一天内导入超过50个帖子),这就是我分享它的原因。我不太了解Python或GData API,我设置了环境&amp;按照这些步骤回答这个问题(我能够将LiveJournal中的帖子导入Blogger)。
答案 1 :(得分:7)
http://nullege.com/codes/search/gdata有一些很好的资源
# 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)