使用gdata Python客户端在Blogger上批量发布
我正在尝试把我所有的Livejournal帖子复制到我在blogger.com的新博客上。为此,我使用了稍微修改过的示例代码,这个代码是随gdata python客户端一起提供的。我有一个包含我所有从Livejournal导入的帖子的json文件。问题是,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)
2 个回答
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或者库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。比如,有些错误信息可能看起来很复杂,但其实它们只是告诉我们哪里出了问题。
当你在写代码时,可能会发现某些功能没有按预期工作。这时候,查看错误信息是一个很好的开始。错误信息通常会指向代码的某一行,告诉你发生了什么问题。理解这些信息可以帮助你更快地找到并解决问题。
此外,网上有很多资源,比如论坛和社区,大家会在这些地方分享他们遇到的问题和解决方案。你可以通过搜索相关问题,找到别人是怎么解决类似问题的,这样可以节省很多时间。
总之,编程是一项需要不断学习和实践的技能,遇到问题是很正常的。保持耐心,多尝试,多问问题,你会逐渐变得更加熟练。
# 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)
我建议你使用谷歌博客转换器,链接在这里:https://code.google.com/archive/p/google-blog-converters-appengine/
要开始使用,你需要先完成以下步骤:
https://github.com/google/gdata-python-client/blob/master/INSTALL.txt - 这是设置谷歌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(谷歌)账户,然后再尝试导入帖子。之后你可以把管理权限转移到你的真实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 $*
附言:我知道这不是你问题的答案,但因为这个回答的目的和你的问题是一样的(就是一天导入超过50个帖子),所以我分享了这个信息。我对Python或GData API了解不多,都是通过设置环境和按照这些步骤来回答这个问题的(而且我确实成功地把帖子从LiveJournal导入到了Blogger)。