Pywikipedia 봇 설치하기

Pywikipedia 설치
Pywikipediabot

1 python 설치 확인[ | ]

대부분의 Linux에는 Python이 설치되어 있다. (CentOS 6 최소 설치 패키지에도 포함되어 있다.) python -V 명령어로 확인해 보자.

[root@zetawiki ~]# python -V
Python 2.7.9

2013년 12월 현재, 권장되는 버전이 2.7.x 라고 하니 업그레이드 하자. (파이썬 2.4.3 버전, 2.6.6 버전에서 봇 최신버전이 안돌아가더라...)[1]

2 svn 설치 확인[ | ]

[root@zetawiki ~]# svn --version
svn, version 1.6.11 (r934486)
   compiled Mar  6 2014, 10:49:10
... (생략)

3 Pywikipedia 설치[ | ]

  • Pywikipedia는 bot의 이름이며, Python으로 작성되었으며 봇 중에 가장 널리 사용되고 있다.
  • 기본적으로 위키백과에서 사용하도록 설정되어 있지만, 설정에 따라 다른 미디어위키 사이트에도 적용할 수 있다.
  • svn으로 설치하며, 현재위치 아래에 pywikipedia라는 폴더가 생기고 거기에 설치된다.
명령어
svn checkout http://svn.wikimedia.org/svnroot/pywikipedia/trunk/pywikipedia/ pywikipedia
실행예시
[root@zetawiki ~]# svn checkout http://svn.wikimedia.org/svnroot/pywikipedia/trunk/pywikipedia/ pywikipedia
... (생략)
A    pywikipedia/externals/simplejson/decoder.py
A    pywikipedia/externals/simplejson/ordered_dict.py
 U   pywikipedia/externals/simplejson
Checked out external at revision 242.

Error validating server certificate for 'https://svn.toolserver.org:443':
 - The certificate is not issued by a trusted authority. Use the
   fingerprint to validate the certificate manually!
Certificate information:
 - Hostname: *.toolserver.org
... (생략)
(R)eject, accept (t)emporarily or accept (p)ermanently? p
svn: warning: Error handling externals definition for 'pywikipedia/externals/pycolorname':
svn: warning: OPTIONS of 'https://svn.toolserver.org/svnroot/drtrigon/externals/pycolorname': 200 OK (https://svn.toolserver.org)
svn: warning: Error handling externals definition for 'pywikipedia/externals/opencv':
svn: warning: OPTIONS of 'https://svn.toolserver.org/svnroot/drtrigon/externals/opencv': 200 OK (https://svn.toolserver.org)
Checked out revision 11781.

4 Pywikipedia 설정[ | ]

4.1 user-config.py 생성[ | ]

명령어
cd pywikipedia
echo "mylang='ko'" > user-config.py
echo "family='사이트명'" >> user-config.py
echo "usernames['사이트명']['ko']='봇계정명'" >> user-config.py
cat user-config.py
  • 여기서 사이트명은 각 문서의 제목 바로 아래를 보면 확인할 수 있다.[2]
  • 봇계정명은 봇을 돌릴 계정이름이며, 봇을 돌릴 용도의 계정이라는 점을 명시하기 위해 맨 뒤에 'bot'을 붙이는 것이 관례이다. 물론 이 계정으로 일반사용자처럼 로그인하거나 편집을 하는 것도 가능하다.
실행 예시
[root@zetawiki ~]# cd pywikipedia
[root@zetawiki pywikipedia]# echo "mylang='ko'" > user-config.py
[root@zetawiki pywikipedia]# echo "family='Jmnote'" >> user-config.py
[root@zetawiki pywikipedia]# echo "usernames['Jmnote']['ko']='Jmnote_bot'" >> user-config.py
[root@zetawiki pywikipedia]# cat user-config.py
mylang='ko'
family='Jmnote'
usernames['Jmnote']['ko']='Jmnote_bot'

4.2 사이트명_family.py 생성[ | ]

명령어
cat > ./families/사이트명_family.py <<END_SCRIPT
# -*- coding: utf-8  -*-
import config, family, urllib
class Family(family.Family):
 def __init__(self):
  family.Family.__init__(self)
  self.name = '사이트명'
  self.langs = {
   'ko': '서버주소',
  }
  self.namespaces[2]['ko'] = u'User'
  self.namespaces[3]['ko'] = u'User_talk'
 def version(self, code):
  return "미디어위키버전"
 def scriptpath(self, code):
  return '미디어위키스크립트경로'
 def path(self, code):
  return '미디어위키스크립트경로/index.php'
END_SCRIPT
실행 예시
[root@zetawiki pywikipedia]# cat > ./families/Jmnote_family.py <<END_SCRIPT
> # -*- coding: utf-8  -*-
> import config, family, urllib
> class Family(family.Family):
>  def __init__(self):
>   family.Family.__init__(self)
>   self.name = 'Jmnote'
>   self.langs = {
>    'ko': 'jmnote.com',
>   }
>   self.namespaces[2]['ko'] = u'User'
>   self.namespaces[3]['ko'] = u'User_talk'
>  def version(self, code):
>   return "1.23.3"
>  def scriptpath(self, code):
>   return '/w'
>  def path(self, code):
>   return '/w/index.php'
> END_SCRIPT
실행결과확인 예시
[root@zetawiki pywikipedia]# cat ./families/Jmnote_family.py
# -*- coding: utf-8  -*-
import config, family, urllib
class Family(family.Family):
 def __init__(self):
  family.Family.__init__(self)
  self.name = 'Jmnote'
  self.langs = {
   'ko': 'jmnote.com',
  }
  self.namespaces[2]['ko'] = u'User'
  self.namespaces[3]['ko'] = u'User_talk'
 def version(self, code):
  return "1.23.3"
 def scriptpath(self, code):
  return '/w'
 def path(self, code):
  return '/w/index.php'

5 로그인 테스트[ | ]

명령어
python login.py

위 명령어를 입력하면 패스워드를 물어본다. 한번 로그인하면 login-data 폴더에 쿠키 정보 파일이 생성되고, 향후 명령어 실행시 자동로그인된다.

실행 예시1 (로그인 성공)
[root@zetawiki pywikipedia]# python login.py
WARNING: Required package missing: BeautifulSoup.py
WARNING: A required package is missing, but externals can automatically install it. If you say Yes, externals will need administrator privileges, and you might be asked for the administrator password.
WARNING: Give externals permission to try to install package? (y/N)
→ y Enter
WARNING: Download package "BeautifulSoup.py" from https://pypi.python.org/packages/syntaxhighlight/B/BeautifulSoup/BeautifulSoup-3.2.0.tar.gz
WARNING: Size of download: 31077 byte(s)
WARNING: MIME type: ['application', 'x-tar']
WARNING: Extract package "BeautifulSoup.py" to /root/pywikipedia/externals/BeautifulSoup.py.
WARNING: Install package "BeautifulSoup.py" by applying patch to /root/pywikipedia/externals/BeautifulSoup.py.
patching file BeautifulSoup.py
WARNING: Package "BeautifulSoup.py" installed to /root/pywikipedia/externals/BeautifulSoup.py.
Password for user Jmnote_bot on Jmnote:ko:
→ 봇 계정의 패스워드 입력 Enter
No handlers could be found for logger "pywiki"
Logging in to Jmnote:ko as Jmnote_bot via API.
Should be logged in now
→ 로그인 성공
[root@zetawiki pywikipedia]# ll ./login-data
total 12
-rw-r--r-- 1 root root 143 Jan 21 20:48 Jmnote-ko-Jmnote bot-login.data
-rw-r--r-- 1 root root 143 Jan 21 20:48 Jmnote-ko-None-login.data
-rw-r--r-- 1 root root 161 Jan 21 20:41 README
→ login-data 폴더에 쿠키 정보 파일이 생성되었다.
실행 예시2 (로그인 실패 - 아이디 또는 패스워드 없음)
[root@zetawiki pywikipedia]# python login.py
Password for user Jmnote_bot on Jmnote:ko: 
Logging in to Jmnote:ko as Jmnote_bot via API.
Login failed. Wrong password or CAPTCHA answer?
API login failed, retrying using standard webpage.
Logging in to Jmnote:ko as Jmnote_bot 
Login failed. Wrong password or CAPTCHA answer?
→ 당연한 말이지만 아이디가 없으면 위와 같이 로그인에 실패한다. 사이트에서 계정을 먼저 만든 후에 해보시라.

6 여담[ | ]

  • 로그인까지 성공하였다면, 이제 Pywikipedia 봇의 여러 기능들을 사용할 수 있다.
  • 필자가 가장 필요하다고 생각했던 봇은 이중 넘겨주기 수정 봇이다. 그것에 대해 보려면 미디어위키 이중 넘겨주기 수정 봇 돌리기를 참고하시라.

7 같이 보기[ | ]

8 주석[ | ]

  1. http://www.mediawiki.org/wiki/Manual:Pywikipediabot/Quick_Start_Guide
  2. LocalSettings.php에서 지정하는 $wgSitename 변수값과 같다.

9 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}