User talk:Vipuser/2006-5
添加话题欢迎![编辑]
{{User lang-0|zh}}
sur via uzanta paĝo aŭ meti ĝin en via babela ŝablono.{{User lang-0|zh}}
on your user page or put it into your Babel box.那我以后就在这给你回复了。。。
PiBot[编辑]
质量很差。。。 请问你用的是Windows吧?哪个版本?还有我可不可以在词典那边给你回复,我不常来百科。。。 --Shibo77 13:29 2006年5月10日 (UTC)
- 我用Linux,以前也用过Windows,大概是以下几步,安装python 2.4.3,下载pywikipedia.py,创建用户(试验时也可以直接用User:Vipuser),用Notepad(Start>>Programs>>Accessories)复贴以下内容,存为
user-config.py
(也存在c:\pywikipedia
里):
mylang = 'zh' family = 'wiktionary' usernames['wiktionary']['zh'] = 'Vipbot' console_encoding = 'utf-8'
最后:Start>>Run>>cmd
>>cd c:\pywikipedia
>>login.py
>>输入你的密码>>就可以运行了,你先想做什么样的工作? --Shibo77 13:48 2006年5月10日 (UTC)
- 成功了吗?最初可以用
interwiki.py
(最简单),接着上头login.py
>>输入你的密码>>interwiki.py
。 --Shibo77 14:06 2006年5月10日 (UTC)
- 成功了吗?最初可以用
msg={ 'de': u'Automatischer Import von Artikeln', 'en': u'Automated import of articles', 'ia': u'Importation automatic de articulos', 'nl': u'Geautomatiseerde import', 'zh': u'python程序: 自动引进/创建新条目' }
--Shibo77 14:14 2006年5月10日 (UTC)
- 对呀、设用代理后机器人同样也用代理呀。。。 --Shibo77 14:17 2006年5月10日 (UTC)
- 对呀、设用代理后机器人同样也用代理呀。。。 --Shibo77 14:17 2006年5月10日 (UTC)
raise socket.error, msg
socket.error: (10060, 'Operation timed out')
可能得在login.py中做修改,不会是因为没有授予bot
权利,可以问一下User:Shizhao他有可能知道该怎么做。。。--Shibo77 14:35 2006年5月10日 (UTC)
- 试试:export http_proxy="IP码:80" login.py 有可能需要大写HTTP_PROXY=
- 我先睡了,赶明再聊! --Shibo77 14:57 2006年5月10日 (UTC)
- 更改代理时必须得在根上做更改,Linux用
Acquire::http::Proxy "IP码:8080"
,所有的信息就都引用代理了。从cmd
上的dir
里找出你的ipconfig
,再把IP码更改为代理地址。听你说的浏览器可行而程序却行不通很可能是因为你是用浏览器做的代理IP码更改(因为程序是直接连上网的,不用浏览器)。可惜视窗Server 2003上具体该怎么做我还是真的不会(大概是export HTTP_PROXY="IP码:80"
),我再继续调查调查。。。 --Shibo77 05:31 2006年5月12日 (UTC)- 也可以更改你python程序的上网子程序
httplib.py
改成以下几行试试:
- 也可以更改你python程序的上网子程序
- 更改代理时必须得在根上做更改,Linux用
- 我先睡了,赶明再聊! --Shibo77 14:57 2006年5月10日 (UTC)
(>>c: >>Python24>>Lib>>次键单击httplib>>添加以下头一行>>保存>>Start>>Run>>cmd
>>cd c:\pywikipedia
>>login.py
>>输入Vipbot的密码>>pagefromfile.py -file:vip.txt -start:77 -end:88
可以在词典这边运行,没人在意Template:X;))
HTTP_PROXY = "在此输入你的代理IP码" HTTP_PORT = 80 HTTPS_PORT = 443
试一试。别忘了用Notepad(Start>>Programs>>Accessories)复贴以下内容,存为user-config.py
(也存在c:\pywikipedia
里):
mylang = 'zh' family = 'wiktionary' usernames['wiktionary']['zh'] = 'Vipbot' console_encoding = 'utf-8'
还有在pagefromfile.py
中加上底下这几句(>>c: >>pywikipedia>>次键单击pagefromfile>>添加以下zh:
一行,即编辑摘要显示):
msg={
'de': u'Automatischer Import von Artikeln',
'en': u'Automated import of articles',
'ia': u'Importation automatic de articulos',
'nl': u'Geautomatiseerde import',
'zh': u'python程序: 自动引进/创建新条目'
}
--Shibo77 09:19 2006年5月12日 (UTC)
- 我刚刚用145.97.39.130成功了!Template:X:D (我试用Windows XP) --Shibo77 09:24 2006年5月12日 (UTC)
============================================[编辑]
HTTP = "145.97.39.134"
HTTP_PORT = 80
HTTPS_PORT = 443
或有可能:
HTTP = "145.97.39.134:80"
HTTP_PORT = 80
HTTPS_PORT = 443
我写错了,再试试?(可惜我没法自己做试验) --Shibo77 10:55 2006年5月13日 (UTC)
=============================================[编辑]
把login.py改成:
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Script to log the robot in to a wiki account.
Suggestion is to make a special account to use for robot use only. Make
sure this robot account is well known on your home wikipedia before using.
Parameters:
-pass:XXXX Uses XXXX as password. Be careful if you use this
parameter because your password will be shown on your
screen.
-sysop Log in with your sysop account.
-all Try to log in on all sites where a username is defined in
user-config.py.
-force When doing -all, ignores if the user is already loged in,
and tries to login for all listed sites.
This may be useful if you have changed the account name
and need to aquire new login cookies.
If not given as parameter, the script will ask for your username and password
(password entry will be hidden), log in to your home wiki using this
combination, and store the resulting cookies (containing your password hash,
so keep it secured!) in a file in the login-data subdirectory.
All bots in this library will be looking for this cookie file and will use the
login information if it is present.
To log out, throw away the XX-login.data file that is created in the login-data
subdirectory.
"""
#
# (C) Rob W.W. Hooft, 2003
#
# Distributed under the terms of the MIT license.
#
__version__='$Id: login.py,v 1.45 2006/03/03 16:51:20 a_engels Exp $'
import re, sys, getpass
import httplib, urllib2
import socket
import wikipedia, config
def makepath(path):
""" creates missing directories for the given path and
returns a normalized absolute version of the path.
- if the given path already exists in the filesystem
the filesystem is not modified.
- otherwise makepath creates directories along the given path
using the dirname() of the path. You may append
a '/' to the path if you want it to be a directory path.
from [email protected] 2002/03/18
"""
from os import makedirs
from os.path import normpath,dirname,exists,abspath
dpath = normpath(dirname(path))
if not exists(dpath): makedirs(dpath)
return normpath(abspath(path))
class LoginManager:
def __init__(self, password = None, sysop = False, site = None):
self.site = site or wikipedia.getSite()
if sysop:
try:
self.username = config.sysopnames[self.site.family.name][self.site.lang]
except:
raise wikipedia.NoUsername(u'ERROR: Sysop username for %s:%s is undefined.\nIf you have a sysop account for that site, please add such a line to user-config.py:\n\nsysopnames[\'%s\'][\'%s\'] = \'myUsername\'' % (self.site.family.name, self.site.lang, self.site.family.name, self.site.lang))
else:
try:
self.username = config.usernames[self.site.family.name][self.site.lang]
except:
raise wikipedia.NoUsername(u'ERROR: Username for %s:%s is undefined.\nIf you have an account for that site, please add such a line to user-config.py:\n\nusernames[\'%s\'][\'%s\'] = \'myUsername\'' % (self.site.family.name, self.site.lang, self.site.family.name, self.site.lang))
self.password = password
def botAllowed(self):
"""
Checks whether the bot is listed on Wikipedia:Bots to comply with
the policy on the English and the Simple English Wikipedia.
"""
if self.site in (wikipedia.getSite('en', 'wikipedia'), wikipedia.getSite('simple', 'wikipedia')):
pl = wikipedia.Page(self.site, "Wikipedia:Bots")
text = pl.get()
return "[[user:%s" % self.username.lower() in text.lower()
else:
# No bot policies on other
return True
def getCookie(self, remember=True):
"""Login to wikipedia.
remember Remember login (default: True)
Returns cookie data if succesful, None otherwise."""
data = {"wpName": self.username,
"wpPassword": self.password,
"wpLoginattempt": "Aanmelden & Inschrijven", # dutch button label seems to work for all wikis
"wpRemember": str(int(bool(remember)))}
data = wikipedia.urlencode(data.items())
headers = {
"Content-type": "application/x-www-form-urlencoded",
"User-agent": "RobHooftWikiRobot/1.0"
}
pagename = self.site.login_address()
if self.site.hostname() in config.authenticate.keys():
response = urllib2.urlopen(urllib2.Request('http://'+self.site.hostname()+pagename, data))
data = response.read()
wikipedia.cj.save(wikipedia.COOKIEFILE)
return "Ok"
else:
conn = httplib.HTTPConnection("145.97.39.134:80")
conn = httplib.HTTPConnection(self.site.hostname())
conn.request("POST", pagename, data, headers)
response = conn.getresponse()
conn.close()
data = response.read()
n=0
Reat=re.compile(': (.*?);')
L = []
for eat in response.msg.getallmatchingheaders('set-cookie'):
m = Reat.search(eat)
if m:
n += 1
L.append(m.group(1))
if len(L) == 4:
return "\n".join(L)
else:
return None
def storecookiedata(self, data):
"""
Stores cookie data.
The argument data is the raw data, as returned by getCookie().
Returns nothing."""
filename = 'login-data/%s-%s-%s-login.data' % (self.site.family.name, self.site.lang, self.username)
f = open(makepath(filename), 'w')
f.write(data)
f.close()
def login(self, retry = False):
if not self.password:
# As we don't want the password to appear on the screen, we use getpass().
s = u'Password for user %s on %s: ' % (self.username, self.site)
self.password = getpass.getpass(s.encode(config.console_encoding))
# Convert the password from the encoding your shell uses to the one your wiki
# uses, via Unicode. This is the same as wikipedia.input() does with the
# username, but input() uses raw_input() instead of getpass().
self.password = unicode(self.password, config.console_encoding)
self.password = self.password.encode(wikipedia.myencoding())
wikipedia.output(u"Logging in to %s as %s" % (self.site, self.username))
# Ensure bot policy on the English Wikipedia
if not self.botAllowed():
wikipedia.output(u'*** Your username is not listed on [[Wikipedia:Bots]].\n*** Please make sure you are allowed to use the robot before actually using it!')
cookiedata = self.getCookie()
if cookiedata:
self.storecookiedata(cookiedata)
wikipedia.output(u"Should be logged in now")
return True
else:
wikipedia.output(u"Login failed. Wrong password?")
if retry:
self.password = None
return self.login(retry = True)
else:
return False
def main():
username = password = None
sysop = False
logall = False
forceLogin = False
for arg in sys.argv[1:]:
arg = wikipedia.argHandler(arg, 'login')
if arg:
if arg.startswith("-pass:"):
password = arg[6:]
elif arg == "-sysop":
sysop = True
elif arg == "-all":
logall = True
elif arg == "-force":
forceLogin = True
else:
wikipedia.showHelp('login')
sys.exit()
if logall:
if sysop:
namedict = config.sysopnames
else:
namedict = config.usernames
for familyName in namedict.iterkeys():
for lang in namedict[familyName].iterkeys():
site = wikipedia.getSite(code=lang, fam=familyName)
if not forceLogin and site.loggedin(sysop = sysop):
wikipedia.output(u'Already logged in on %s' % site)
else:
loginMan = LoginManager(password, sysop = sysop, site = site)
loginMan.login()
else:
loginMan = LoginManager(password, sysop = sysop)
loginMan.login()
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
试试。就是加了两行:import socket
与conn = httplib.HTTPConnection("145.97.39.134:80")
--Shibo77 12:00 2006年5月14日 (UTC)