Pywikibot

Pywikibot
개발자 Pywikibot team
발표일 2002년
최신(안정화) 버전 2.0rc5
프로그래밍 언어 파이썬
플랫폼 파이썬, 2.7 버전 혹은 3.3 이상 버전.[1]
라이선스 비자유(Copyrighted)[2]

Pywikibot(파이위키봇)은 미디어위키 기반의 위키에서 파이썬(Python) 스크립트를 돌려서 위키 편집을 용이하게 하는 도구이다. 위키미디어 재단에서 공식적으로 봇을 만드는 데 사용하는 도구이며, 이를 이용해서 위키 봇을 만드는 데에도 유용하게 이용할 수 있다. 미디어위키 홈페이지에 사용법이 자세하게 나와 있으며, 파이썬에 대한 지식이 부족해도 설치만 하면 내장된 스크립트를 통해서 위키를 쉽게 편집할 수 있게 도와준다.

1 설치방법[편집]

우선 Pywikibot은 파이썬 기반으로 돌아가는 도구이기에 파이썬을 설치해야 한다. 파이썬 공식 홈페이지에서 다운로드를 받는다. 다만 윈도우 운영체제의 경우 파이썬을 설치만 해서는 명령 프롬프트(cmd.exe) 창에 python 명령어가 활성하되지 않기에 반드시 제어판- 시스템-왼쪽의 고급 시스템 정보-고급 탭-아래 환경 변수 버튼을 누르고 path 변수를 python 실행파일이 설치된 폴더의 디렉토리를 지정해야 한다.

그 다음에는 Pywikibot 설치 페이지에서 Pywikibot 소스를 다운로드 받는다. python 명령어가 명령 프롬프트에 활성화된 것을 확인하면 명령 프롬프트 창에 아래와 같이 입력해서 로그인이 되는지 확인하면 된다.

> cd "c:\users\username\pywikibot"
> python pwb.py login

user-config.py를 지정하지 않았다면 user-config.py를 지정하라는 메시지가 자동으로 띄운다. 안내창대로 입력하면 된다. 그러나 기본적으로 설정된 위키 이외의 위키에서 사용하려면 이 방법으로는 사용이 안 된다. 따라서 아래에 서드파티 위키에서 사용하는 방법을 안내할 것이다.

2 사용방법[편집]

일단 메인 소스인 pwb.py를 이용해서 실행시킨다. 명령어 구조는 다음과 같다.

python pwb.py (script명) (부가변수명)

각 기본 스크립트의 설명에 대해서는 mw:Manual:Pywikibot/Scripts를 참조하자. 참고로 각 스크립트들은 script 폴더에 내장되어 있다. 파이썬에 대한 지식이 부족해도 봇을 쉽게 다룰 수 있다.

2.1 관리자 권한으로 로그인하기[편집]

2018년 이전 Pywikibot 버전에서는 delete.py 같이 관리자 권한이 필요한 스크립트를 처리할 때에는 관리자 계정 로그인을 지정해야 했다. 이를 위해 user-config.py 파일을 아래와 같이 usernames 부분 아래에 sysopnames 부분도 같이 설정하는 것이다.

mylang = 'ko'
family = '(사이트의 패밀리명)'
usernames['(패밀리명)']['ko'] ='(사용자 계정명)'
sysopnames['(패밀리명)']['ko'] ='(상위권한 사용자 계정명)'
password_file = '(봇 패스워드를 저장한 파이썬 파일명)'

그 다음 pwb를 이용해서 로그인할 때 다음과 같은 "-sysop" 코드를 뒤에 붙이면 된다.

> python pwb.py login -sysop

2020년 이후 버전 기준으로는 sysopnames 딕셔너리리를 아예 사용하지 않고 봇을 연결한 주 계정에 관리자 권한이 있는지 여부를 인식한다. 즉 delete.py 같이 사용 시에 관리자 권한을 요구하는 스크립트도 다른 스크립트와 동일한 방법으로 사용할 수 있다.

3 리브레 위키에서 사용하는 방법[편집]

우선 pywikibot을 설치한 디렉토리에서 pywikibot/families 디렉토리를 연다. 그 다음에 아래와 같이 패밀리명과 언어명, url 등을 입력해야 한다. 여기서 파일명을 반드시 libre_family.py로 지정해야 한다.

from pywikibot import family        # pywikibot에서 사용하고 있다는 표시

class Family(family.Family):

    name = 'libre'
    langs = {'ko':'librewiki.net'}

    def protocol(self, code):     #사용 프로토콜, https를 사용할 경우 반드시 지정해야 한다.

       return 'https'
    def scriptpath(self, code): # 스크립트 경로
       return ''
    def ignore_certificate_error(self, code): #인증서 오류 무시하기 위한 코드.
        return True

마지막으로 pwb.py가 있는 디렉토리와 같은 곳에서 user-config.py를 아래와 같이 설정하면 된다.

family = 'libre'
mylang = 'ko'
usernames['libre']['ko']=u'(사용자명)'

이제 확인하려면 pwb.py가 있는 디렉토리로 가서 아래와 같이 명령어를 입력한다. 이 때에 비밀번호 입력창이 뜨면 비밀번호를 입력하면 로그인이 가능한 것을 확인할 수 있다.

PS C:\(directory)\Pywikibot>python pwb.py login

다만 얘기치 못한 편집 제한상황에 대처하기 위해 봇 비밀번호를 설정할 것을 권장한다. 봇 비밀번호를 만들면 API를 이용해서 접근하기에 비번을 입력하지 않아도 접근할 수 있다. 우선 Pywikibot으로 봇을 사용할 계정으로 로그인 한 뒤 특수:봇비밀번호 문서를 열고 봇 이름을 지정한다. 그러면 이 특수문서가 그 봇에 대해 비밀번호를 생성한다. 그 다음 user-config.py에 아래와 같이 설정한다.

mylang = 'ko'
family = 'libre'
usernames['libre']['ko'] = u'(사용자명)'
password_file = "user-password.py" #비번 정보를 저장할 파일.

그 다음 user-password.py를 pwb.py와 같은 디렉토리에 다음과 같이 입력한다. 그러면 비번 입력창 없이 바로 로그인이 가능해진다. 이 파일에 2개 이상의 계정을 등록해두면, 필요할 때 -user 파라미터로 다른 계정을 통해 작업할 수 있다.

(u'(사용자명)', BotPassword(u'(봇이름)', u'(봇이름에 대한 비밀번호)'))

한 계정으로도 여러 개의 봇을 생성할 수도 있다.

4 활용 예제[편집]

4.1 문서 분류 바꾸기[편집]

가장 많이 활용하는 예제 중 하나로 문서의 분류명을 바꾼다. Pywikibot을 설치하면 category.py라는 파일에 의해 동작된다.

사용하려면 명령 프롬프트나 Powershell 등을 이용해서 Pywikibot에 로그인한 뒤 아래와 같은 형식으로 명령어를 입력하면 된다.

    python pwb.py category (동작) [-(옵션)]

여기서 동작(Action)은 "add"처럼 -기호를 사용하지 않고, 반대로 추가 옵션들은 반드시 -기호를 사용한 후에 서술해야 한다. 우선 동작의 옵션은 다음과 같다.

  • add - 분류를 추가한다. 사용 시에 "-filename:"같은 특별한 옵션이 없을 경우 특정 문서와 링크로 연결된 문서에 대해 분류 추가에 대한 질의응답을 실시한다.
  • move - 분류를 바꾼다. 사용 시에 "-filename:" 같은 특별한 옵션이 없을 경우 위키 내부의 모든 문서에 대해 분류 변경을 시도한다.
  • remove -분류를 지운다. 사용 시에 "-filename:" 같은 특별한 옵션이 없을 경우 위키 내부의 모든 문서에 대해 분류 제거를 시도한다.
  • tidy - 분류 안에 있는 문서들을 하위 분류로 옮긴다. 특정한 분류명 A를 지정하면 분류 A에 있으면서 A의 하위 분류에 있지 않은 문서들에 대해 하위 분류로 이동할 지 질의한다.
  • tree - 특정 분류와 그 하위 분류 구조를 보여준다.
  • listify - 특정 분류 안에 있는 문서들을 보여준다.

예를 들면 분류 A를 분류 AB로 옮기는 것을 시도할 때 아래와 같은 코드를 입력하면 된다.

   python pwb.py category move -from:"A" -to:"AB"

4.2 문서 내부의 특정 텍스트를 다른 것으로 바꾸기[편집]

문서 내부의 특정 어구를 찾아서 바꾸는 스크립트이다. replace.py 스크립트를 사용한다. 다음과 같이 사용할 수 있다.

    python pwb.py replace [-(옵션)]

옵션에는 여러 가지가 있는데, 우선 "user-fixes.py"문서에 지정된 패턴대로 텍스트 치환을 시도하려면 다음과 같이 입력하면 된다.

   $ python pwb.py replace -fix:(example) [(-옵션)]

여기서 fix는 특정 옵션으로 바꾼다는 것을 의미한다. 예를 들면 fix:HTML이라고 표현하면 HTML 태그를 미디어위키 문법에 맞게 고칠 수 있다.

다른 방법으로 하나의 어구를 바꿀 때는 다음처럼 사용할 수 있다. regex 태그를 사용하면 바꾸는 내용을 일반적인 키워드가 아닌 정규 표현식 형태로 변화시킨다.

    python pwb.py replace -start:! [-regex] "(바꾸기전1)" "(바꾼후1)" "(바꾸기전2)" "(바꾼후2)" ... 

또 다음과 같은 옵션을 사용할 수도 있다. 여기서 이 스크립트를 작동시키려면 반드시 아래의 조건 중 하나는 명시해야 한다.

  • cat:(분류명) - 특정 분류 안에 있는 문서들을 대상으로 한다.
  • file:(파일명) - 특정 파일명의 텍스트 문서 안에 적힌 문서들을 대상으로 한다.
  • links:(문서명) - 지정한 문서 내부에서 링크로 연결된 문서들을 대상으로 한다.
  • page:(문서명) - 특정 문서를 대상으로 한다.
  • ref:(파일명) - 지정한 문서를 연결하는 링크를 포함하는 문서들들 대상으로 한다.
  • start:(문서명) - 위키 내에서 특정 문서명을 시작으로 모든 문서들을 대상으로 한다. "-start:!"라고 표시하면 모든 문서에 대해 찾아 바꾸기를 수행할 수 있다.
  • xml:(xml파일명) - 특수:내보내기를 통해 작성된 xml 파일 안에 있는 문서들을 대상으로 수행한다.

더 자세한 내용은 Pywikibot/사용법 문서를 참조한다.

4.2.1 특정 문자가 인식되지 않을 때[편집]

쉘 환경에서 일부 문자는 프로그램 예약 문자로 인식되지 않기 때문에 이스케이프 문자를 추가로 붙여야 한다. 자세한 내용은 이스케이프 문자 문서를 참고할 것.

  • 명령 프롬프트는 |, &, " 등이 예약어이기에 입력하기 위해서 앞에 이스케이프 문자 ^를 붙여야 할 때가 있다. 단 따옴표 안에서는 이스케이프 문자를 활용할 필요는 없다.
  • PowerShell(파워셸)에서는 작은따옴표('), 큰따옴표(")가 공백을 포함한 문자열을 표현하기 위한 예약어이다. replace.py에서 명령어 셋에서 큰따옴표를 반드시 입력해야 하는 부분이 있기에 큰따옴표를 입력하는 부분은 작은따옴표로 감싸야 한다. 또한 큰따옴표 안에 큰따옴표를 입력하기 위해서는 큰따옴표 두 개를 붙이면 된다. 예를 들면 "나는 너에게 "사랑한다"고 말하고 싶다"를 입력하고 싶으면 '"나는 너에게 ""사랑한다""고 말하고 싶다"'라고 입력해야 하는 식이다.

5 참조[편집]

6 각주

  1. 2.7버전은 추후 지원 중단할 예정
  2. 일부 코드는 공개 소스를 기반으로 사용하여 공개 라이선스이다. mw:Pywikibot/Overview 참조.