Pywikipedia 봇 자동화 (구식)

Jmnote (토론 | 기여)님의 2016년 3월 30일 (수) 21:47 판 (→‎같이 보기)
mediawiki bot automation, pywikipedia bot automation
미디어위키 봇 자동화, 미디어위키 봇 예약작업
pywikipedia 자동화, pywikipedia 배치 수행

1 개요

  • 이 글은 이제 필요없게 되었다. ㅠㅠ
본래 pywikipediabot은 자동로그인 기능이 있어서 expect가 필요없다.
필자가 이것을 썼던 이유는 pywikipediabot 로그인 버그 때문이었다.

2 수동 실행

[root@zetawiki ~]# python /root/pywikipedia/redirect.py double -always
Retrieving special page...
Retrieved 9 redirects from special page.

>>> JQuery 날짜 범위 선택 <<<
   Links to: [[JQuery UI 기간 선택]].
   Links to: [[JQuery UI 기간 선택 (datepicker)]].
- #넘겨주기 [[JQuery UI 기간 선택]]
+ #넘겨주기 [[JQuery UI 기간 선택 (datepicker)]]

Password for user Jmnote_bot on Jmnote:ko:
→ 패스워드를 요구하므로 자동으로 처리될 수 없다.

3 expect 설치 확인

패스워드가 자동으로 입력되게 하기 위해 expect가 필요하다.

[root@zetawiki ~]# rpm -qa | grep expect
expect-5.43.0-8.el5

4 자동화 스크립트 생성

mkdir /root/script
cd /root/script
echo '#!/usr/bin/expect' > redirect_expect.sh
echo 'set timeout 600' >> redirect_expect.sh
echo 'spawn python /root/pywikipedia/redirect.py double -always' >> redirect_expect.sh
echo "expect \"Password for user\"" >> redirect_expect.sh
echo "send \"패스워드\\r\"" >> redirect_expect.sh
echo "expect eof" >> redirect_expect.sh
chmod 755 redirect_expect.sh
→ /root/script 폴더를 만들고 거기에 스크립트를 생성하도록 하였다.
→ 위 명령어 중 자신의 패스워드를 넣으면 된다.
→ 명령어 수행 중 대기시간이 길기 때문에 timeout 값을 충분히 주어야 한다. 여기서는 600초.

5 스크립트 실행 테스트

[root@zetawiki ~]# /root/script/redirect_expect.sh
spawn python /root/pywikipedia/redirect.py double -always
Retrieving special page...
Retrieved 2 redirects from special page.

>>> Crontab 작업 목록 전체 보기 <<<
Sleeping for 4.3 seconds, 2012-08-14 17:58:59
   Links to: [[모든 사용자 crontab 작업 보기]].
Sleeping for 4.6 seconds, 2012-08-14 17:59:04
Sleeping for 4.8 seconds, 2012-08-14 17:59:09
   Links to: [[모든 계정 crontab 작업 보기]].
Sleeping for 4.8 seconds, 2012-08-14 17:59:14
Sleeping for 4.8 seconds, 2012-08-14 17:59:19
- #넘겨주기 [[모든 사용자 crontab 작업 보기]]
+ #넘겨주기 [[모든 계정 crontab 작업 보기]]

Password for user Jmnote_bot on Jmnote:ko: P@ssw0rd

Logging in to Jmnote:ko as Jmnote_bot via API.
Should be logged in now
Sleeping for 24.3 seconds, 2012-08-14 17:59:24
Updating page [[Crontab 작업 목록 전체 보기]] via API

... (생략)
→ 스크립트가 패스워드 입력 등 모든 과정이 자동으로 진행된다.

6 예약 등록

명령어
cat <(crontab -l) <(echo "35 * * * * /root/script/redirect_expect.sh 2>&1 >> /var/log/redirect_expect.log") | crontab -
crontab -l
→ 매시 35분에 수행되도록 예약한다.
→ 수행내역을 /var/log/redirect_expect.log에 기록한다.[1]
실행예시
[root@zetawiki ~]# cat <(crontab -l) <(echo "35 * * * * /root/script/redirect_expect.sh 2>&1 >> /var/log/redirect_expect.log") | crontab -
[root@zetawiki ~]# crontab -l
35 * * * * /root/script/redirect_expect.sh 2>&1 >> /var/log/redirect_expect.log

7 작동 확인

봇의 작동상태는 다음과 같은 곳에서 확인할 수 있다.

8 같이 보기

9 주석

  1. 중간에 2>&1 를 넣었기 때문에 표준출력뿐 아니라 오류메시지도 기록된다.
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}