metaweblog API csdn python 实现



layout: post

author: "kele"

title: "metaweblog API csdn python实现"

tags:

  • python
  • metaweblog

    date: "2018-02-14 22:15:32"

    ---

    metaweblog API csdn python 实现

    一直想同步三个博客,梦想很大,一直在找各种工具,但是一个也没有遇到,今天突然发现了一个叫作open live writer的东西,仔细研究了一下发现是一种叫做Metaweblog API的东西,cnblog 和csdn都是支持的,到github上看了一下,发现了python实现cnblog metaweblog api的程序,所以研究了一下,写出了csdn的api


    #coding:utf-8
    import xmlrpclib
    import os
    import sys
    import markdown2
    import httplib
    import mimetypes

    username=""
    password=""
    url="http://write.blog.csdn.net/xmlrpc/index"

    #server=xmlrpclib.ServerProxy(url)

    class metaWeblog_csdn:
        def __init__(self,url,username,password):
            self.url=url
            #print url,username,password
            #self.p=Proxy()
            #self.p.set_proxy("127.0.0.1:8888")
            self.user=username
            self.passwd=password
            self.server=xmlrpclib.ServerProxy(url,encoding="utf-8")
            self.blog_id=self.getUsersBlogs()[0][‘blogid‘]
            #print self.blog_id
            self.type=["original","report","translated"]

        def newPost(self,title,description,categories,publish):
            return self.server.metaWeblog.newPost(self.blog_id,self.user,self.passwd,
                dict(title=title,description=description,categories=categories),publish)

        def getPost(self,postid):
            return self.server.metaWeblog.getPost(postid,self.user,self.passwd)

        def getCategories(self):
            return self.server.metaWeblog.getCategories(self.blog_id,self.user,self.passwd)

        def getRecentPosts(self,numberOfPosts):
            return self.server.metaWeblog.getRecentPosts(self.blog_id,self.user,self.passwd,numberOfPosts)

        def editPost(self,postid,title,content,categories,tags,publish,type=0,description=""):
            return self.server.metaWeblog.editPost(postid,self.user,self.passwd,
                dict(title=title,type=self.type[type],description=description,content=content,categories=",".join(categories),tags=",".join(tags)),publish)

        def newMediaObject(self,abspath):
            with open(abspath,"rb") as f:
                bits=xmlrpclib.Binary(f.read())
            type=mimetypes.guess_type(abspath)[0]
            name=os.path.basename(abspath)
            return self.server.newMediaObject(self.blog_id,self.user,dict(bits=bits,name=name,type=type))

        def getUserInfo(self):
            return self.server.blogger.getUserInfo("0123456789ABCDEF",self.user,self.passwd)

        def deletePost(self,postid,publish):
            return self.server.blogger.deletePost("0123456789ABCDEF",postid,self.user,self.passwd,publish)

        def getUsersBlogs(self):
            return self.server.blogger.getUsersBlogs("0123456789ABCDEF",self.user,self.passwd)

    # 只是为了通过fiddler的代理进行通信,进行抓包调试
    class Proxy(xmlrpclib.Transport):
        def set_proxy(self, proxy):
            self.proxy = proxy

        def make_connection(self, host):
            self.realhost = host
            h = httplib.HTTPConnection(self.proxy)
            return h

        def send_request(self, connection, handler, request_body):
            connection.putrequest("POST", ‘http://%s%s‘ % (self.realhost, handler))

        def send_host(self, connection, host):
            connection.putheader(‘Host‘, self.realhost)

    if __name__=="__main__":
        if len(sys.argv)!=3:
            print "error"
        else:
            test=metaWeblog_csdn(url,username,password)
            test.newPost(sys.argv[1],markdown2.markdown_path(sys.argv[2]),[""],True)

    ‘‘‘
    else:
            test=metaWeblog_csdn(url,username,password)
            with open(sys.argv[2],"r") as blog:
                test.newPost(title,description,[""],True)

    if __name__=="__main__":
        test=metaWeblog_csdn(url,username,password)
        #temp=test.getCategories()[0]
        #for i in temp:
        # print i+":"+temp[i].encode("utf-8")
        #print getblogid()[0][‘blogid‘]
    # print test.getUserInfo()
        #print os.listdir("./")
        print test.getCategories()

        #print test.getUsersBlogs()
        #print test.getRecentPosts()
        #print test.getUserInfo()

        #print html.encode("utf-8")
        #print test.newPost("test","test","笔记","test",True,html.encode("utf-8"),0)
        try:
            #print test.newPost("test","tests",["笔记"],["tests"],True,"test",0)
        except:
            print "erro"
    ‘‘‘

比较坑的一点是发送categories的时候必须是一个列表,所以他会转化成为xmlrpclib中的array类型,然后才能正常发送,否则会一直爆500 错误

xmlrpclib 代理

我是通过fiddle抓包进行调试,fiddle开启的代理是127.0.0.1:8888,所以我们需要让创建severproxy的时候添加一个代理,查阅官方文档得到:

import httplib

class Proxy(xmlrpclib.Transport):

def set_proxy(self, proxy):

self.proxy = proxy

        def make_connection(self, host):
            self.realhost = host
            h = httplib.HTTPConnection(self.proxy)
            return h

        def send_request(self, connection, handler, request_body):
            connection.putrequest("POST", ‘http://%s%s‘ % (self.realhost, handler))

        def send_host(self, connection, host):
            connection.putheader(‘Host‘, self.realhost)

proxy=Proxy("127.0.0.1:8888")然后构造serverproxy的时候,需要添加transport参数,server=xmlrpclib.ServerProxy("url",transport=proxy)

然后你就可以通过fiddle查看你发送和接受的数据包了

原文地址:https://www.cnblogs.com/kele1997/p/8449011.html

时间: 2024-08-26 21:58:43

metaweblog API csdn python 实现的相关文章

研究如何使用metaweblog api

正在研究如何使用metaweblog api 花了一点时间寻找了一下部分博客的API接口类型及设置文件,随着软件的更新可能有的会有变化,具体以官方公布的为主. Pjblog: Movable Type http://你的Blog根目录/xmlrpc.asp i170: MetaWeblog API http://www.i170.com/user/你的i170的用户名 Blogbus: Blogger        http://rpc.blogbus.com/blogger mydonews:

使用metaweblog API实现通用博客发布 之 API测试

使用metaweblog API实现通用博客发布 之 API测试 使用博客比较少,一则是文笔有限,怕写出的东西狗屁不通,有碍观瞻, 二则是懒,很讨厌要登录到网站上写东西,也没有那么多时间(借口).个人最喜欢用于记录的工具是Zim https://zim-wiki.org/ ,记录东西超级方便,可惜只支持PC版本, 记录的东西可以到处为MarkDown 格式,非常方便(你现在看到的这篇就是用Zim写的). 无意间看到Vs Code上有博客园的插件,作为程序员,顺手google/百度了一下,原来通用

转 MetaWeblog API 编写

如今,许多人都熟悉个人和公司或业界主办的博客.后者明显成为了传统公司和行业网站的下一代新兴产物.博客的内容涉及从简洁的特制产品公告和公共关系到实用且深刻的主题探索,这些主题可能对公司的产品或行业的未来方向相关. 常用缩写词 API:应用程序编程接口 FTP:文件传输协议 HTTP:超文本传输协议 IT:信息技术 MIME:多媒体 Internet 邮件扩展(Multimedia Internet Mail Extensions) RFC:请求注解(Request for comments) RP

MWeb 1.3.7 发布!增加发布到 Wordpress 等支持 MetaWeblog API 的服务,如:Wordpress 博客、新浪博客、cnblogs、oschina。

MWeb 1.3.7 版的新功能 增加发布到 Wordpress 等支持 Metaweblog API 的服务,目前经测试过的有: Wordpress 博客.新浪博客.cnblogs.oschina. 增加发布到 Tumblr 和 Scriptogr.am 即时预览改进,原来会闪动,现在拿掉了同步滚动功能后不会了. 编辑器和三栏切换也有小改进. 下边介绍一下发布到 Wordpress 等支持 Metaweblog API 的功能 我所知,Mac 下支持这一功能的 Native 的 Markdow

MetaWeblog API调用

http://rpc.cnblogs.com/metaweblog/webenh 在网上闲逛,突然对博客的接口感兴趣,经考察,多数博客都对metaWeblog Api 提供了支持,虽然windows live writer是好用,不过出于对这个接口的好奇,也想自己做个能发博客的小工具. 到处浏览资料,用了一个下午终于成功发布了一篇简陋版博客:).其实很简单,方法对了很快就连上了. MetaWeblog API中文说明 1.什么是MetaWeblog API? MetaWeblog API(MWA

调用百度ocr的API,python简易版本

调用百度ocr的API,python简易版本 https://www.jianshu.com/p/e10dc43c38d0 1. 注册 百度云注册账号 https://cloud.baidu.com/?from=console 管理应用 https://console.bce.baidu.com/ai/#/ai/ocr/overview/index 创建一个 图1登陆之后的界面 进入链接之后创建应用,由于是从文字识别点进去的,所以默认选中的就是ocr相关内容,填好表格确认. 图2 创建应用之后的

基于百度语音识别API的Python语音识别小程序

一.功能概述 实现语音为文字,可以扩展到多种场景进行工作,这里只实现其基本的语言接收及转换功能. 在语言录入时,根据语言内容的多少与停顿时间,自动截取音频进行转换. 工作示例: 二.软件环境 操作系统:win10 语言:Python 版本:3.6.0 Python库:AipSpeech(百度语音识别SDK客户端),wave,PyAudio,paInt16 Python库安装:除百度为:pip install baidu-aip,其他直接 pip install *(库名) 即可. 三.原理概述

利用MetaWeblog API 自制博客发布小工具

博客园提供了诸多数据接口, 利用这些接口可以很容易的实现博客的发布,修改,删除等 1.需要引用一个DLL:为CookComputing.XmlRpcV2 2.新建一个类,在其中是一些要实现的东西,如: 3.调用这些接口发布一篇简单的博客,其中的URL应该是你的博客设置里的 在下方的账号与密码处填上你的账号与密码 4.查看结果

6 API DOC —— Python API

6.3.9 MATH OPS: tf.reduce_mean 原文地址:https://www.cnblogs.com/thebreakofdawn/p/9087389.html