Discuz!X3.2ユーザーのpythonスクリプトを一括追加

11718 ワード

Discuz!X3.2ユーザーのpythonスクリプトを一括追加
Discuzを作った!X3.2環境は仕事に用いられ、ユーザーを追加する必要があるときに適切なツールが見つからなかった.同僚は最終的にボタンの精霊で問題を解決したが、コードを書いて残すことにした.使えるかもしれない.PHPではなくPythonなのは、最近Pythonに触れているだけで、このような場合に便利であることがわかりました.
ユーザー・コードの追加:
# encoding: utf-8
'''
Created on 2015 7 1 

@author: ZhongPing
'''
import urllib
import urllib2
import cookielib
import re

class Adder(object):
    '''
    classdocs
    '''
    home_url = ''
    admin_user = ''
    admin_password = ''
    formhash = ''

    def __init__(self, url, admin_user, admin_password):
        '''
        Constructor
        '''
        self.home_url = url + "?"
        self.admin_user = admin_user
        self.admin_password = admin_password
        #      CookieJar   Cookie
        self.cookieJar=cookielib.CookieJar()
        #        opener
        self.opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookieJar))
        self.headers ={
            "Host":"localhost", 
            "Referer": url
        }

    def login(self):
        '''
                
        '''
        #         
        data={
            "admin_username":self.admin_user,
            "admin_password":self.admin_password,
            'frames':'yes',
            'admin_questionid':'0',
            'submit':'  '
        }
        # urllib    
        post_data=urllib.urlencode(data)        
        url = self.home_url
        req=urllib2.Request(url,post_data,self.headers)
        result = self.opener.open(req)
        url = self.home_url+'action=members&operation=add'
        req=urllib2.Request(url)
        result = self.opener.open(req)
        tpage = result.read()
        i = tpage.find('100+i]
        pattern = re.compile(r'')
        match = pattern.match(tpage)
        formhash = ''
        if match:
            formhash = match.groups()[0]
        self.formhash = formhash
        #print(self.formhash)

    def adduser(self,uname,upwd,uemail,ugrpid = '10',emailnotify = '0',addsubmit = '  '):
        '''
            
        '''
        url = ""
        url = self.home_url+('action=members&operation=add')
        values = {'formhash':self.formhash,
                  'newusername':uname,
                  'newpassword':upwd,
                  'newemail':uemail,
                  'newgroupid':ugrpid,
                  'emailnotify':emailnotify,
                  'addsubmit':addsubmit
        }
        data = urllib.urlencode(values) 
        req=urllib2.Request(url,data,self.headers)
        response = self.opener.open(req)
        the_page = response.read()
        i = the_page.find('

Discuz!

') if (i>0): print((" "+uname+" !").decode("utf8")) else: print((" "+uname+" !").decode("utf8")) def addusers(self,users): ''' users : [{'newusername':newusername, 'newpassword':newpassword, 'newemail':newemail, 'newgroupid':'10', 'emailnotify':'0', 'addsubmit':'addsubmit' }, ....] ''' self.login() for u in users: if (hasattr(u, "newgroupid") and hasattr(u, "emailnotify") and hasattr(u, "addsubmit")) : self.adduser(u['newusername'], u['newpassword'], u['newemail'], u['newgroupid'], u['emailnotify'], u['addsubmit']) else: self.adduser(u['newusername'], u['newpassword'], u['newemail']) def readtxt(file): users = [] fo = open(file) lines = fo.readlines() for l in lines: if len(l)>0 : u = l.split(",") if len(u) == 6: users.append({'newusername':u[0], 'newpassword':u[1], 'newemail':u[2], 'newgroupid':u[3], 'emailnotify':u[4], 'addsubmit':u[5] }) if len(u) == 3: users.append({'newusername':u[0], 'newpassword':u[1], 'newemail':u[2] }) return users def main(): file = 'user.txt' home_url = 'http://localhost/upload/admin.php' admin = 'admin' pwd = '123456' adder = Adder(home_url,admin,pwd) users = readtxt(file) adder.addusers(users) if __name__ == '__main__': main() pass

1. Main() :

file: 。
home_url: 。
pwd: 。

2. ( , , , , ,addsubmit)。 :

test1,123456,test1@test.com,10,0,addsubmit
test2,123456,test2@test.com,10,0,addsubmit
test3,123456,test3@test.com,10,0,addsubmit
test4,123456,test4@test.com,10,0,addsubmit

の のみを とすることもできます.
test1,123456,test1@test.com
test2,123456,test2@test.com
test3,123456,test3@test.com
test4,123456,test4@test.com