블로그를 한 곳으로 옮기려다보니 노가다가 엄청 끔찍했다.
그래서 생각난 것이 Open API로 포스팅이 가능한가 한 것이다.
찾아보면 나온다. -_-+
Web 핸들링하기엔 python이 좋단다. 음.. 한번도 안해봤는데..
그래도 개발자인데! 언어가 어떠면 어떠랴~~
——————————————————————————–
# -*- coding: utf-8 -*-
import xmlrpclib
# egloos
egloos = xmlrpclib.Server(“https://rpc.egloos.com/rpc1″)
datastruct={‘category’: ‘미분류’, ‘description’: “posted by xmlrpc”, ‘title’:'xmlrpc test’}
no = egloos.metaWeblog.newPost(“”, “userid”, “userpassword”, datastruct, True)
r = egloos.metaWeblog.getPost(no, “userid”, “userpassword”)
print r
——————————————————————————–
요렇게 하면 포스팅을 함수로 넣을 수 있다.
그럼 함수로 만들고
——————————————————————————–
def SendEgloosPost(self, title, content):
egloos = xmlrpclib.Server(“https://rpc.egloos.com/rpc1″)
datastruct = {‘category’: ‘미분류’, ‘description’: content, ‘title’:title}
no = egloos.metaWeblog.newPost(“”, self.username, self.password, datastruct, True)
——————————————————————————–
blogger에 있는 RSS를 다운받아서 xml을 파싱해서 넣으면 되겠다 싶었다.
클래스로 만들면
——————————————————————————–
# -*- coding:utf-8 -*-
import xml.parsers.expat
import xmlrpclib
class BodyLoader:
username = ‘icksishu’
password = ‘46b96c31354f9′
def Run(self):
self.body=[]
self.item={}
self.value=”
self.handle={}
self.handle["feed"]=(self.__Body_Start, self.__Body_End)
self.handle["entry"]=(self.__Item_Start, self.__Item_End)
self.handle["title"]=(self.__Property_Start, self.__Property_End)
self.handle["content"]=(self.__Property_Start, self.__Property_End)
self.p=xml.parsers.expat.ParserCreate()
self.p.StartElementHandler=self.__Start
self.p.EndElementHandler=self.__End
self.p.CharacterDataHandler=self.__Property_Value
self.p.Parse(xmlData)
self.SendPost()
#print self.body
def __Start(self, name, attr):
self.handle[name][0](name, attr)
def __End(self, name):
self.handle[name][1](name)
def __Property_Start(self, name, attr):
self.value = ”
def __Property_End(self, name):
self.item[name]=self.value.decode(‘utf-8′)
def __Property_Value(self, data):
self.value=data
def __Item_Start(self, name, attr):
self.item={}
def __Item_End(self, name):
self.body.append(self.item)
def __Body_Start(self, name, attr):
self.body=[]
def __Body_End(self, name):
pass
def SendEgloosPost(self, title, content):
egloos = xmlrpclib.Server(“https://rpc.egloos.com/rpc1″)
datastruct = {‘category’: ‘미분류’, ‘description’: content, ‘title’:title}
no = egloos.metaWeblog.newPost(“”, self.username, self.password, datastruct, True)
def SendPost(self):
for record in self.body:
self.SendEgloosPost(record['title'], record['content'])
print ‘title: ‘, record['title'], ‘\n’
print ‘content: ‘, record['content'], ‘\n’
f = open(“samjv_simple.xml”)
xmlData = f.read()
a=BodyLoader()
a.Run()
f.close()
——————————————————————————–
클래스하고 클래스 핸들링까지 작성 끝! 바로 run!!
왠걸 작동을 안한다.
parsing 하는 중에 제대로 값이 안넘어간다.
원인은 blogger RSS는 atom을 따르는데 xml에 속성들이 꽤 많다.
——————————————————————————–
<?xml version=’1.0′ encoding=’UTF-8′?>
<?xml-stylesheet href=”http://www.blogger.com/styles/atom.css” type=”text/css”?>
<feed xmlns=’http://www.w3.org/2005/Atom’ xmlns:openSearch=’http://a9.com/-/spec/opensearchrss/1.0/’ xmlns:georss=’http://www.georss.org/georss’>
<id>tag:blogger.com,1999:blog-29738970</id>
<updated>2009-02-19T03:29:40.932+09:00</updated>
<title type=’text’>은은한 자스민 벡터</title>
<subtitle type=’html’>(The jasmine Vector of distant peals)</subtitle>
<link rel=’http://schemas.google.com/g/2005#feed’ type=’application/atom+xml’ href=’http://sam-jv.blogspot.com/feeds/posts/default’/>
<link rel=’self’ type=’application/atom+xml’ href=’http://sam-jv.blogspot.com/feeds/posts/default’/>
<link rel=’alternate’ type=’text/html’ href=’http://sam-jv.blogspot.com/’/>
<link rel=’next’ type=’application/atom+xml’ href=’http://sam-jv.blogspot.com/feeds/posts/default?start-index=26&max-results=25′/>
<author>
<name>Samuel</name>
<uri>http://www.blogger.com/profile/18326591820717088420</uri>
<email>noreply@blogger.com</email>
</author>
<generator version=’7.00′ uri=’http://www.blogger.com’>Blogger</generator>
<openSearch:totalResults>111</openSearch:totalResults>
<openSearch:startIndex>1</openSearch:startIndex>
<openSearch:itemsPerPage>25</openSearch:itemsPerPage>
<entry>
<id>tag:blogger.com,1999:blog-29738970.post-7428656882510326883</id>
<published>2009-01-14T14:36:00.001+09:00</published>
<updated>2009-01-14T23:59:58.422+09:00</updated>
<app:edited xmlns:app=’http://purl.org/atom/app#’>2009-01-14T23:59:58.422+09:00</app:edited>
<category scheme=’http://www.blogger.com/atom/ns#’ term=’번역’/>
<title type=’text’>Project Darkstar server tutorial 번역</title>
<content type=’html’> … 중략 …</content>
<link rel=’replies’ type=’application/atom+xml’ href=’http://sam-jv.blogspot.com/feeds/7428656882510326883/comments/default’ title=’게시물 덧글’/>
<link rel=’replies’ type=’text/html’ href=’http://sam-jv.blogspot.com/2009/01/project-darkstar-server-tutorial-ko.html#comment-form’ title=’0개의 덧글’/>
<link rel=’edit’ type=’application/atom+xml’ href=’http://www.blogger.com/feeds/29738970/posts/default/7428656882510326883?v=2′/>
<link rel=’self’ type=’application/atom+xml’ href=’http://sam-jv.blogspot.com/feeds/posts/default/7428656882510326883′/>
<link rel=’alternate’ type=’text/html’ href=’http://sam-jv.blogspot.com/2009/01/project-darkstar-server-tutorial-ko.html’ title=’Project Darkstar server tutorial 번역’/>
<author>
<name>Samuel</name>
<uri>http://www.blogger.com/profile/18326591820717088420</uri>
<email>noreply@blogger.com</email>
</author>
<thr:total xmlns:thr=’http://purl.org/syndication/thread/1.0′>0</thr:total>
</entry>
——————————————————————————–
이런 식인데
<feed xmlns=’http://www.w3.org/2005/Atom’ xmlns:openSearch=’http://a9.com/-/spec/opensearchrss/1.0/’ xmlns:georss=’http://www.georss.org/georss’>
여기서부터 인식이 안된다.
음..
안되면 바꿔!
editor(난 acroedit를 쓴다) 매크로 기능을 써서 <entry>, <title>, <content>만 떼어 냈다.
——————————————————————————–
<feed>
<entry>
<title>Project Darkstar server tutorial 번역</title>
<content><br /><br /> … 중략 …]]></content>
</entry>
<entry>
<title>수트를 제대로 입는 Tip 95가지 -GQ</title>
<content><< 수트를 제대로 입는 Tip 95가지 -GQ >><br /><br /> … 중략 …]]></content>
</entry>
</feed>
——————————————————————————–
이런 식으로.
다시 run!
실패.. ~_~
뭐 뻔한게 <content>안에 html tag들이 있으니 xml 파싱에 실패한거였다.
다시 바꿔!
——————————————————————————–
<feed>
<entry>
<title>Project Darkstar server tutorial 번역</title>
<content><![CDATA[<br /><br /> ... 중략 ...]]></content>
</entry>
<entry>
<title>수트를 제대로 입는 Tip 95가지 -GQ</title>
<content><![CDATA[<< 수트를 제대로 입는 Tip 95가지 -GQ >><br /><br /><br /> ... 중략 ...]]></content>
</entry>
</feed>
——————————————————————————–
<![CDATA[ 태그를 활용하면 간단.
또 다시 run!!
아름답게 egloos로 올라갔다.
그럼 이제 wordpress로 올려볼까 했는데…
설치형 wordpress에 API를 어떻게 쓰는 지 도저히 찾을 수가 없다..
결국.. 노가다를.. -_-;;
그래도 중요한 건 생애 첫 python 프로그램을 만들었다는 거!