Pywikibot

Pywikibot
소프트웨어 정보
개발 Pywikibot team
출시 2002년
언어 영어[1]
플랫폼 파이썬, 3.6 이상 버전.[2]
작성언어 파이썬
라이선스 비자유(Copyrighted)[3]
웹사이트 https://www.mediawiki.org/wiki/Manual:Pywikibot

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

2023년 기준으로 최신 버전은 8.1이다.

설치방법[편집 | 원본 편집]

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

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

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

사용방법[편집 | 원본 편집]

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

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

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

로그인 방법[편집 | 원본 편집]

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

user-config.py 작성방법[편집 | 원본 편집]

그냥 스크립트 창에 python pwb.py login라고 입력해도 user-config를 스크립트가 알아서 지정해주지만 사전에 파일을 작성하면 도움이 된다.

mylang = '언어 코드' # 한국어면 'ko', 영어면 'en'으로 입력
family = '패밀리 이름' # 사이트의 패밀리 이름. 예를 들면 위키백과는 'wikipedia'라고 입력하면 된다.
usernames['패밀리 이름']'언어코드'] = '사용자 계정명'
# password_file = 'user-password.py' # 비밀번호를 저장한 파일명

참고로 usernames는 딕셔너리 형태이기에 사이트를 여러 개 이용할 경우 아래처럼 여러 개 입력할 수도 있다.

usernames['libre']['ko'] = 'utolee90'
usernames['wikipedia']['ko'] = 'Letter Light'
...

아래와 같이 -all 옵션을 붙이면 이 등록한 사이트를 전부 로그인할 수도 있다.

> python pwb.py login -all

또한 password_file 경로를 지정하면 로그인할 때 비밀번호를 직접 입력하지 않고도 로그인이 가능해진다. 참고로 보통 파일명은 user-password.py 형태로 지정한다. 비밀번호 정보는 user-password.py에 아래와 같은 파이썬 튜플 형식 중 하나를 이용해서 지정하면 되며, 사이트 하나 정보는 튜플 하나에 대응한다.

('계정명', '비밀번호') # 사이트가 하나만 있을 때. 이 경우 myfamily, lang은 user-config.py에 지정한 형식대로 출력한다. 
('사이트명', '계정명', '비밀번호') # 사이트가 여러 개 있을 때에는 사이트명을 튜플에 명시해야 한다.
('언어코드', '사이트명', '계정명', '비밀번호') # 언어코드도 명시할 필요가 있으면 맨 앞에 명시

특수:봇비밀번호를 이용해 봇 비밀번호를 지정했을 때에는 비밀번호를 입력하는 문자열 대신 BotPassword('봇계정명', '봇비밀번호')를 입력하면 된다. 봇비밀번호 생성 기능을 이용해서 봇을 만들 때는 아래 "새로운 봇 비밀번호 만들기"를 누른 뒤 봇 계정을을 지정한 후 봇의 권한을 설정하면 위키 엔진이 자동으로 봇 비밀번호를 지정한다. 이 봇 계정명의 형식은 "계정이름@봇이름" 형식으로 지정되며, 비밀번호는 봇 비밀번호를 생성할 때 제공하는 번호를 복사한 뒤 붙여넣으면 된다. 다만 아래 봇계정명 입력할 때에는 앞 부분의 "계정이름@" 부분은 제외하고 입력해야 한다. 참고로 이 비밀번호를 분실할 경우 찾을 수 있는 방법이 없기에 봇을 삭제해야 한다. 봇 비밀번호를 설정하면 그냥 비밀번호를 입력할 때에 뜰 수 있는 경고 메시지가 나타나지 않거나 로그인 속도가 빨라지는 이점이 존재한다.

('계정명', BotPassword('봇계정명', '봇비밀번호')) # 사이트가 하나만 있을 때. 이 경우 myfamily, lang은 user-config.py에 지정한 형식대로 출력한다. 
('사이트명', '계정명', BotPassword('봇계정명', '봇비밀번호')) # 사이트가 여러 개 있을 때에는 사이트명을 튜플에 명시해야 한다.
('언어코드', '사이트명', '계정명', BotPassword('봇계정명', '봇비밀번호')) # 언어코드도 명시할 필요가 있으면 맨 앞에 명시

이전 버전에서 관리자 권한으로 로그인하기[편집 | 원본 편집]

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 같이 사용 시에 관리자 권한을 요구하는 스크립트도 다른 스크립트와 동일한 방법으로 사용할 수 있다.

서드파티 위키에서 사용하는 방법[편집 | 원본 편집]

리브레 위키 같은 서드파티 위키의 정보는 pywikibot을 처음 설치할 때에는 제공되지 않기에 사용자가 정보를 등록해야 한다. pywikibot을 설치한 디렉토리에서 pywikibot/families 디렉토리를 연다. 그 다음에 아래와 같이 패밀리명과 언어명, url 등을 입력해야 한다. 리브레 위키의 패밀리명은 편의상 'libre'로 지정한다. 이 때 예상치 못한 동작 오류를 방지하기 위해 패밀리명을 'libre'라고 지정할 경우 파일명도 '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']='(사용자명)'

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

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

위의 봇 비밀번호 생성하는 방식은 리브레 위키 같은 서드파티 위키에서도 같은 방식으로 적용하면 된다.

활용 예제[편집 | 원본 편집]

문서 분류 바꾸기[편집 | 원본 편집]

가장 많이 활용하는 예제 중 하나로 문서의 분류명을 바꾼다. 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"

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

문서 내부의 특정 어구를 찾아서 바꾸는 스크립트이다. 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/사용법 문서를 참조한다.

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

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

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

참조[편집 | 원본 편집]

각주

  1. 프로그램 특성상 UTF-8 기반 언어면 위키 편집이 가능하므로 한국어 위키 편집에도 별다른 제약사항이 존재하지 않는다.
  2. 최신 버전인 8.x 버전 기준.
  3. 일부 코드는 공개 소스를 기반으로 사용하여 공개 라이선스이다. mw:Pywikibot/Overview 참조.