본문 바로가기
미디어위키

Manual Pywikibot Third-party Wiki Quick Start

by 다움위키 2023. 11. 28.

미디어위키 봇 (Pywikibot) 설정하기

이 페이지는 Manual:Pywikibot/Use_on_Third-party_wikis의 짧은 작업 요약입니다. 만약 명확하지 않은 내용이 있다면 그리고 만약 위키에 더 많은 이름공간, 언어 또는 여기에서 논의되지 않은 다른 설정을 사용하면, 자세한 내용은 해당 기사를 참조하십시오. 이것의 대부분은 영어로 된 하나의 위키 사이트에서 작동합니다. 만약 비-영어 언어로 된 위키를 가지고 있다면, 그에 따라 가족 파일을 변경할 수 있습니다 (쉽습니다).

봇을 만들기 전에, 사용 가능한 스크립트를 살펴보십시오. 스크립트는 유연하고 많은 작업을 수행할 수 있지만 만약 특정 작업에 사용할 수 없는 스크립트가 있다면, Python으로 직접 만들 수 있습니다.

Requirements for a bot

여러분 개인 컴퓨터가 아닌 컴퓨터의 위키에서 봇을 실행하기 위해, 호스팅 제공업체에 대한 쉘 접근이 요구됩니다. 만약 쉘 접근권한이 있는지 여부를 알지 못하면, 호스팅 제공업체에 문의하십시오.

파이썬이 설치되어 있는지 여부와 버전을 확인하기 위해, 쉘 프롬프트에서 "python --version"을 입력하십시오.

지원되는 파이썬 버전이 필요합니다. 만약 파이썬의 호환되는 버전이 설치되었다면 결정하기 위해 아래 표를 참조하십시오.

현재 봇을 실행하려면 Python 3.6.1 이상이 필요합니다.

스크립트는 파이위키봇의 루트 디렉토리에 있는, pwb.py와 함께 실행되어야 합니다.

python pwb.py myscript

Summary

아래의 자세한 내용을 반드시 필요한 부분만 기록해 둡니다. 과거에 비해 너무 간단하게 봇을 운영할 수 있습니다.

1. 사용자 만들기: 위키에서 만들어야 합니다. 기존 사용자가 test이면, test_bot 정도로 만드는 것이 좋겠습니다.

2. 봇 사용자 권한 부여하기: 위키 관리자로 로그인한 후에, Special:UserRights에서 test_bot에 bot 권한을 부여해야 합니다.

3. 사용자 홈디렉토리에 파이위키봇의 코어(프로그램)을 받습니다.

디렉토리 이름은 아무거나 상관없습니다.

4. 두 개의 파일 만들기: 하나는 수동으로 하나는 자동으로 만들 수 있습니다.

  • gvim user-config.py
 mylang ='en'
 family ='DawoumWiki'
 usernames['DawoumWiki']['en']='test_bot'
 console_encoding = 'utf-8'

'en'으로 해도 한글 작업이 잘 됩니다. 'DawumWiki'를 자신의 $wgSitename에 정의된 위키 이름으로 바꿉니다. 여기서 test_bot은 자신이 만든 봇 사용자 이름을 입력해야 합니다.

url과 위키 이름은 자신의 것으로 바꾸세요.

5. 로그인 해보기

  • python pwb.py login

의존성 프로그램을 설치해야 될 수도 있습니다. 대체로 y를 입력하고, 패스워드만 정확히 입력해 주시면 될 듯 합니다.

6. 봇 작업해 보기

  • python pwb.py add_text -cat:Life_and_Information -text:"This is a Test." -except:"\{\{([Tt]emplate:|)[Dd]ocumentation [Ss]ubpage" -up

여기서 Life_and_Information은 자신의 위키에 있는 카테고리 이름으로 바꾸어야 합니다.

  • python pwb.py revertbot

이전의 봇의 작업을 되돌려 줍니다. 그래서 만약 봇에게 잘못된 작업을 시켰다면, 작업이 끝난 직후 바로 실행시키는 것이 좋습니다.

문제가 발생하면, 아래의 과정과 더 긴 버전을 참조하십시오. 또는 토론 지면에 남겨주셔도 됩니다.

Steps

해야 할 일: 위키에서 봇 사용자를 만들고, 권한을 부여하고, 봇 소프트웨어를 가져오고, 두 개의 텍스트 파일을 만들고, 소프트웨어를 업로드하고, 봇으로 로그인하고, 테스트 스크립트를 실행하여 봇이 동작하지는 확인합니다.

1. 위키에서 정규 사용자 계정을 만드는 것처럼, 봇 사용자를 만드십시오 (예를 들어, SiteBot/password). 합리적으로 안전한 암호를 만드십시요 ( "sitebot123"과 같이 쉬운 것은 좋지 않습니다).

2. 봇 계정에서 로그아웃하고 Bureaucrat 권한을 가진 계정으로 로그인하십시요. 사용자 권한에서, 봇 사용자로 만든 계정에 "bot"권한을 부여하십시오. 만약 FlaggedRevs 확장을 설치했다면 해당 봇에게 "reviewer" 그리고 "editor" 권한을 부여하십시오.

3. 컴퓨터에 Pywikibot 소프트웨어를 다운로드하십시오. 직접 타르볼 파일을 받거나 다른 형식에 대해 다운로드 섹션을 참조하십시오.

4. 타르볼 파일의 내용을 컴퓨터의 폴더로 추출하십시오. 해당 디렉토리에는 많은 하위 폴더가 있습니다. 이 모든 것이 봇 소프트웨어입니다. 경로에서 비-영어 (악센트부호를 붙여진) 문자에 대해 주의를 기울여야 하며, 적어도 리눅스에서 여러가지 경우에서 문제 발생의 원인이기 때문입니다. (디렉토리 경로는 영어로 만드십시요.) [1][2]

5. 타르볼을 푼, 파이위키봇을 위치한 폴더 안에, 이름 "user-config.py"을 갖는 텍스트 파일을 다음과 같이 사용자 정의된 줄을 포함하도록 만드십시요:

 mylang ='en'
 family ='yoursite'
 usernames['yoursite']['en']='MySiteBot'
 console_encoding = 'utf-8'

여기서 가족(family) 변수에 대해 "yoursite"로 보이는 것은, 사이트를 식별하는 간단한 이름을 사용하십시오. 예제에서는 전부 소문자이지만, $wgSitename의 값과 같은 값을 사용해야 합니다.

봇 계정에 대해:

usernames['yoursite']['en']='MySiteBot'

MySiteBot은 1 단계에서 만든 봇 사용자 계정의 이름입니다. 대소문자를 구별합니다.

이 파일을 저장하십시요.

6. 위키 서버에서 봇을 사용하기 위해, 서버에 "core" 디렉토리를 업로드하십시오. 이 디렉토리는 LocalSettings.php 파일과 같은 디렉토리에 있어서 절대 안됩니다. 그밖에 기본적으로 사용자는 해당 디렉토리를 가리키는 url을 사용하여 파일에 접근할 수 있습니다.

7. (텔넷이나 SSH를 통하여) 쉘 계정으로 로그인하고 서버에 업로드된 디렉토리로 이동하십시오.

8. 이제 사이트에 대한 가족 파일을 만듭니다. 먼저 자동으로 생성될 수 있는지 확인하십시오. 쉘 프롬프트에서, "python generate_family_file.py"를 입력하고 ↵ Enter 키를 누르면, 두 개의 값, 위키의 url과 $wgSitename를 입력해야 합니다. 이 위키는 다음과 같이 명령하면, 입력하지 않아도 파일이 생성됩니다.

Generating family file from http://dawoum.duckdns.org

==================================
API url: http://dawoum.duckdns.org/w/api.php
MediaWiki version: 1.33.0-wmf.14
==================================

Determining other languages...
Loading wikis... 
  * en... in cache
Writing /any-directory/core/pywikibot/families/DawoumWiki_family.py...

만약 오류가 발생하고 파일이 생성되지 않으면 아래 예제를 따르십시오.

영어 언어에서 오직 하나의 위키가 있는 가장 간단한 경우에 대해, 다음은 Mozilla 위키의 예제입니다:

# -*- coding: utf-8  -*-
 
 from pywikibot import family
 
 # The official Mozilla Wiki. #Put a short project description here.
 
 class Family(family.Family):
 
     def __init__(self):
         family.Family.__init__(self)
         self.name = 'mozilla' # Set the family name; this should be the same as in the filename.
         self.langs = {
             'en': 'wiki.mozilla.org', # Put the hostname here.
         }
 
         # Translation used on all wikis for the different namespaces.
         # Most namespaces are inherited from family.Family.
         # Check the family.py file (in main directory) to see the standard
         # namespace translations for each known language.
         # You only need to enter translations that differ from the default.
         self.namespaces[4] = {
             '_default': 'MozillaWiki', # Specify the project namespace here.
         }
 
         self.namespaces[5] = {
             '_default': 'MozillaWiki talk', # Specify the talk page of the project namespace here.
         }
 
     def version(self, code):
         return "1.4.2"  # The MediaWiki version used. Not very important in most cases.
 
     def scriptpath(self, code):
         return '' # The relative path of index.php, api.php : look at your wiki address.
# This line may need to be changed to /wiki or /w,
# depending on the folder where your mediawiki program is located.
# Note: Do not _include_ index.php, etc.

이 텍스트 파일은 "mywiki_family.py"으로 변경하고 (mywiki를 위키의 이름에 대해, $wgSitename으로 바꾸십시오) 그리고 "families" 폴더에 업로드해야 합니다 (해당 폴더에는 다른 가족 파일을 발견할 수 있지만, 그것들은 무시될 것입니다). 이제 사이트에 대한 가족 파일이 생겼습니다.

9. 이제 봇에 로그인하여 작동하는지 확인할 것입니다. 쉘 프롬프트에서, "pywikibot" 디렉토리에서, "python pwb.py login"을 입력하십시오. 1단계에서 만든 봇의 암호를 묻는 메시지가 나타납니다. 만약 로그인하면 '성공' 메시지가 표시됩니다. 이 작업은 한 번만 수행하면 됩니다. 봇은 보통 로그인 상태를 유지합니다. 같은 명령을 두 번째 실행하면 다음과 같은 메시지가 나옵니다.

  • python pwb.py login

Logged in on DawoumWiki:en as bot_username.

10. 봇의 작동 여부를 테스트하기 위해, 특정 카테고리의 모든 기사 상단에 텍스트를 추가하는 기존 스크립트를 사용할 수 있습니다. 위키 사이트에서, 몇 개의 기사를 가지고 있는, 예를 들어 10개 이하의 페이지가 있는 카테고리를 찾으시고, 따라서 나중에 쉽게 되돌릴 수 있습니다. 만약 그러한 카테고리가 없다면, 사이트의 3개의 기사를 포함하는 임시 카테고리를 만드십시요.

쉘 명령 프롬프트에서, pywikibot 디렉토리 내부에서, 다음과 같이 add_text 스크립트를 다시 실행하십시오:

python pwb.py add_text -cat:catname -text:"This is a Test." -except:"\{\{([Tt]emplate:|)[Dd]ocumentation [Ss]ubpage" -up

여기서 "-cat:catname"에서 catname을, 위키에 존재하는 카테고리의 이름으로 바꾸십시요. 예를 들어 카테고리 페이지의 제목이 "Category:Test Pages"이면, 명령에서 "-cat:Test_Pages"으로 쓸 것입니다. 원본 문서에는 카테고리를 모두 소문자로 바꾸어 입력 하도록 되어있지만, 리눅스에서는 반드시 대소문자를 구별해서 입력해야 합니다. 아마도 윈도우에서 작업한 것으로 보입니다.

  • python pwb.py add_text -cat:Life_and_Information -text:"This is a Test." -except:"\{\{([Tt]emplate:|)[Dd]ocumentation [Ss]ubpage" -up
Loading Gallery Demo...

>>> Gallery Demo <<<
@@ -0,0 +1 @@
+ This is a Test.

Do you want to accept these changes? ([y]es, [N]o, [a]ll, open in [b]rowser,
[q]uit): a

카테고리 내부의 모든 문서의 최상단에 "This is a Test."가 입력될 것입니다. 한글도 이상없이 잘 입력됩니다.

  • python pwb.py add_text -cat:Life_and_Information -text:"봇 테스트 중인데, 한글을 입력해 봅니다." -except:"\{\{([Tt]emplate:|)[Dd]ocumentation [Ss]ubpage" -up
Loading Gallery Demo...

>>> Gallery Demo <<<
@@ -0,0 +1 @@
+ 봇 테스트 중인데, 한글을 입력해 봅니다.

Do you want to accept these changes? ([y]es, [N]o, [a]ll, open in [b]rowser,
[q]uit): a

11. Recent Changes에서 Active filters 아래의 Human (not bot)을 누르면, Automated contribution 아래에 있는 Bot을 선택해야 봇으로 편집된 사항을 확인할 수 있습니다.

다른 봇에 대해, mw:Manual:Pywikibot/Scripts and mw:Manual:Pywikibot/Create your own script을 참조하십시오. 만약 원하는 작업을 수행할 봇을 찾지 못하면, 자신만의 봇을 만드는 방법에 대한 제안을 위해 기존 스크립트를 볼 수 있습니다.

테스트를 거치지 않은 새로운 봇 스크립트를 실행할 때, 제어 불능 상태가 될 수 있으므로 "테스트" 위키에서 먼저 실행해 보십시요. 일반적인 위키 사용자를 차단할 수 있는 것처럼 역시 봇도 차단할 수 있습니다. 쉘 프롬프트를 종료할 수도 있습니다.

12. 이전의 봇의 작업을 되돌려 줍니다. 그래서 만약 봇에게 잘못된 작업을 시켰다면, 작업이 끝난 직후 바로 실행시키는 것이 좋습니다. 테스트 중에는 한번 작업시키고 한번 지우고 하는 것이 좋겠습니다.

  • python pwb.py revert_bot