Beispiel #1
0
def reply_dwnews_news(post_url, src):
    s = utils.RAPSession(src)
    logger = utils.RAPLogger(post_url)

    # Step 1: 登录
    if not login_dwnews(s, src):
        logger.error(' Login Error')
        return (False, str(logger))
    logger.info(' Login OK')
    r = s.get(post_url)
    ikey = re.findall('ikey = "(\w*)"', r.content)[0]

    r = s.get('http://blog.dwnews.com/index.php',
              params={
                  'r': 'comment/post',
                  'callback': 'success_jsonpCallback',
                  'doitem': 'post',
                  'content': src['content'],
                  'type': 'news',
                  'author': uid,
                  'url': ikey,
                  'club_id': '',
                  'facebook': 0,
                  'twitter': 0,
                  '_': str(random.random()),
              },
              headers={'Referer': post_url})

    if 'success' not in r.content:
        logger.info('Reply Error')
        return (False, str(logger))
    logger.info('Reply OK')
    return (True, str(logger))
Beispiel #2
0
def reply_eulam_forum(post_url, src):
    logger = utils.RAPLogger(post_url)
    host = utils.get_host(post_url)
    s = utils.RAPSession(src)

    # Step 1: 登录
    if not login_eulam_forum(s, src):
        logger.error(' Login Error')
        return (False, str(logger))
    logger.info(' Login OK')

    r = s.get(post_url)
    soup = BeautifulSoup(r.content)
    form = soup.find('form', attrs={'name': 'form'})
    payload = utils.get_datadic(form, CHARSET)
    payload['Body'] = src['content'].decode('utf8').encode(CHARSET)
    payload['BBSXPCodeForm'] = ''
    r = s.post(host + 'ReTopic.asp',
               data=payload,
               headers={'Referer': post_url})
    if u'操作成功'.encode(CHARSET) not in r.content:
        logger.error('Reply Error')
        return (False, str(logger))
    logger.info('Reply OK')
    return (True, str(logger))
Beispiel #3
0
def post_enewstree_forum(post_url, src):
    """ 消息树发主贴函数

    @param post_url:   板块地址 如:http://enewstree.com/discuz/forum.php?mod=forumdisplay&fid=47
    @type post_url:    str

    @param src:        用户名,密码,标题,主帖内容,等等。
    @type src:         dict

    @return:           是否发帖成功,帖子URL
    @rtype:            bool,str

    """
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    # Step 1: 登录
    if not login_enewstree(post_url, sess, src):
        logger.error(' Login Error')
        return ('', str(logger))
    logger.info(' Login OK')

    fid = re.findall(r'fid=(\d*)', post_url)[0]
    resp = sess.get('http://enewstree.com/discuz/forum.php?mod=post&action=newthread&fid='+fid)
    formhash = re.findall(r'formhash=(.*?)"', resp.content)[0]
    logger.info('formhash:'+ formhash)
    payload = {
        'formhash':formhash,
        'posttime':int(time.time()),
        'wysiwyg':'1',
        'subject':src['subject'].decode('utf8').encode(CHARSET,'ignore'),
        'message':src['content'].decode('utf8').encode(CHARSET,'ignore'),
        'allownoticeauthor':'1',
        'usesig':'1',
        'secqaahash':'qSxqZkkW',
        'secanswer':'1776',
        'seccodehash':'cSxqZkkW',
        'seccodemodid':'forum::post',
        'seccodeverify':'ec48',
        'save':'',
        'uploadalbum':'-2',
        'newalbum':'',
    }

    # 发送登录post包
    resp = sess.post('http://enewstree.com/discuz/forum.php?mod=post&action=newthread&fid='+fid
                     +'&extra=&topicsubmit=yes',
                     data=payload,
                     headers = {
                         'Referer':post_url
                     })
    utils.print_to_file(resp.content)
    # 若指定字样出现在response中,表示回复成功
    if src['subject'].decode('utf8') not in resp.content.decode(CHARSET):
        logger.error(' Post Error')
        return ('', str(logger))
    logger.info(' Post OK')
    url = resp.url
    print url
    return (url, str(logger))
Beispiel #4
0
def reply_sina_news(post_url, src):
    """ 新浪新闻回复函数

        - Name:     新浪新闻
        - Feature:  ^http://[^(c|f)].*.sina.com.cn
        - Captcha:  YES
        - Login:    YES

    @param post_url:   新浪地址
    @type post_url:    str

    @param src:        用户名,密码,回复内容,等等。
    @type src:         dict
    
    @return:           是否回复成功
    @rtype:            bool

    """
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    resp = sess.get(post_url)

    # Step 1: 登录
    if not login_sina(sess, src):
        logger.error(' Login Error')
        return (False, str(logger))
    logger.info(' Login OK')

    # Step 2: 回复
    # 频道id
    channel = re.findall(r'channel:.*\'(.*?)\'', resp.content)[0]
    # 新闻id
    newsid = re.findall(r'newsid:.*\'(.*?)\'', resp.content)[0]

    # 构造回复参数
    payload = {
        'channel': channel,
        'newsid': newsid,
        'parent': 'B',
        'content': src['content'].decode('utf-8').encode(CHARSET),
        'format': 'js',
        'ie': CHARSET,
        'oe': CHARSET,
        'ispost': 0,
        'share_url': post_url,
        'video_url': '',
        'img_url': ''
    }
    # 回复地址
    reply_url = 'http://comment5.news.sina.com.cn/cmnt/submit'
    # 发送回复post包
    resp = sess.post(reply_url, data=payload, headers={'Referer': post_url})
    # 若指定字样出现在response中,表示回复成功
    if 'result' not in resp.content:
        logger.error(' Reply Error')
        return (False, str(logger))
    logger.info(' Reply OK')
    return (True, str(logger))
Beispiel #5
0
Datei: sohu.py Projekt: qlmgg/rap
def post_sohu_blog(post_url, src):
    """ 搜狐博客发帖函数

    @param post_url:   搜狐地址
    @type post_url:    str

    @param src:        用户名,密码,回复内容,等等。
    @type src:         dict
    
    @return:           是否回复成功
    @rtype:            bool

    """
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)

    # Step 1: 登录
    if not login_sohu(sess, post_url, src):
        logger.error(' Login Error')
        return (False, str(logger))
    logger.info(' Login OK')

    # Step 2: 回复
    payload = {
        'oper': 'art_ok',
        'm': 'save',
        'shortcutFlag': '',
        'contrChId': '',
        'contrCataId': '',
        'subflag': 0,
        'entrytitle': src['subject'].decode('utf-8').encode('gbk'),
        'keywords': src['subject'].decode('utf-8').encode('gbk'),
        'categoryId': 0,
        'newGategory': '',
        'vc': '',
        'entrycontent': src['content'].decode('utf-8').encode('gbk'),
        'excerpt': '',
        'allowComment': 2,
        'perm': 0,
        'postToGroup': 'off'
    }
    reply_url = 'http://blog.sohu.com/manage/entry.do'
    headers = {
        'Host': 'blog.sohu.com',
        'Origin': 'http://blog.sohu.com',
        'Referer': 'http://blog.sohu.com/manage/entry.do?m=add&t=shortcut',
        'User-Agent': config.user_agent
    }
    resp = sess.post(reply_url, data=payload, headers=headers)
    logger.info(' info: ' + resp.url)
    if u'秒钟后自动'.encode('gbk') not in resp.content:
        logger.error(' Post Error')
        return ('', str(logger))
    resp = sess.post('http://blog.sohu.com/home/entry/list.htm')
    blogId = re.findall(r'data-blogid="(\d+)"', resp.content)[0]
    logger.info(' Post OK')
    return ('http://bigdatabigbai.blog.sohu.com/' + blogId + '.html',
            str(logger))
Beispiel #6
0
Datei: _163.py Projekt: qlmgg/rap
def thumb_up_163(post_url, src):
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)

    resp = sess.get(post_url)
    resp = sess.post(src['extra']['target_url'],
                     headers={
                         'Referer': post_url,
                         'Host': utils.get_host(post_url),
                         'X-Requested-With': 'XMLHttpRequest',
                     })
    logger.info(resp.content)
    return (True, str(logger))
Beispiel #7
0
def reply_backchina_forum(post_url, src):
    """倍可亲回复模块

    @param sess:    requests.Session()
    @type sess:     Session

    @param post_url:   帖子地址
    @type post_url:    str

    @param src:        用户名,密码,回复内容,等等。
    @type src:         dict

    @return:           是否登录成功
    @rtype:            bool

    """
    # Returnable logger
    logger = utils.RAPLogger(post_url)
    host = utils.get_host(post_url)
    sess = utils.RAPSession(src)

    # Step 1: 登录
    if not login_backchina(sess, src):
        logger.error(' Login Error')
        return (False, str(logger))
    logger.info(' Login OK')

    # Step 2: Load post page
    # 获取所需发帖页面,查找与{'id':'fastpostform'}匹配的form标签
    resp = sess.get(post_url)
    soup = BeautifulSoup(resp.content)
    form = soup.find('form', attrs={'id': 'fastpostform'})

    # Step 3: Submit
    # 回复内容
    payload = utils.get_datadic(form)
    if 'subject' in src:
        payload['subject'] = src['subject']
    payload['message'] = src['content']

    #发送post包
    resp = sess.post(host + form['action'], data=payload)

    #判断回帖后页面是否含有回帖内容,若存在则证明回帖成功,否则失败
    if src['content'] in resp.content:
        logger.info('Reply OK')
    else:
        logger.error('Reply Error: Reply Error, please try again !')
        return (False, str(logger))
    return (True, str(logger))
Beispiel #8
0
def post_wailaike_forum(post_url, src):
    """ 外来客论坛发主贴函数

    @param post_url:   板块地址 如:http://www.wailaike.net/group_post?gid=1
    @type post_url:    str

    @param src:        用户名,密码,标题,主帖内容,等等。用户名:[email protected] 密码:wenshen4921119
    @type src:         dict

    @return:           是否发帖成功,帖子URL
    @rtype:            bool,str

    """
     # Returnable logger
    logger = utils.RAPLogger(post_url)
    host = utils.get_host(post_url)
    sess = utils.RAPSession(src)

    # Step 1: 登录
    if not login_wailaike(sess, src):
        logger.error(' Login Error')
        return ('', str(logger))
    logger.info(' Login OK')
    gid = re.findall(r'gid=(\d*)', post_url)[0]
    resp = sess.get('http://www.wailaike.net/newpost?gid='+gid)
    soup = BeautifulSoup(resp.content)
    # 获得发帖form
    form = soup.find('form', attrs={'id': 'editor'})
    # 构造回复参数
    payload = utils.get_datadic(form)
    payload['title'] = src['subject'].decode('utf8').encode(CHARSET)
    payload['rstbody'] = src['content'].decode('utf8').encode(CHARSET)

    resp = sess.get('http://www.wailaike.net/time.php')
    payload['time'] = re.findall('"time":"(.*?)"', resp.content)[0]

    # 发送发帖post包
    resp = sess.post('http://www.wailaike.net/newpost?gid='+gid, data=payload)

    # By sniper 2015-2-1
    # 标题中的'('和')'等需要在正则表达式中转义
    # 如:[转帖]ZT) 汉服是FQ闹的大笑话
    subject = re.escape(src['subject'])
    url = re.findall(r'<h3 class="titles-txt"><a href=\"(.*?)\" target="_blank">' + subject + '</a></h3>',resp.content)[0]
    url = "http://www.wailaike.net" + url
    # 如果url未成功匹配,则抛出异常,Post Error

    logger.info(' Post OK')
    return (url, str(logger))
Beispiel #9
0
def post_powerapple_forum(post_url, src):
    """ 超级苹果论坛发主贴函数

    @param post_url:   板块地址 如:http://bbs.powerapple.com/forum.php?mod=forumdisplay&fid=50
    @type post_url:    str

    @param src:        用户名,密码,标题,主帖内容,等等。
    @type src:         dict

    @return:           是否发帖成功,帖子URL
    @rtype:            bool,str

    """
    logger = utils.RAPLogger(post_url)
    host = utils.get_host(post_url)
    sess = utils.RAPSession(src)

    # Step 1: 登录
    if not login_powerapple(sess, src):
        logger.error(' Login Error')
        return ('', str(logger))
    logger.info(' Login OK')
    # Step 2: Load post page
    fid = re.findall(r'fid=(\d+)', post_url)[0]
    # 获取所需发帖页面,查找与{'id':'fastpostform'}匹配的form标签
    resp = sess.get(
        'http://bbs.powerapple.com/forum.php?mod=post&action=newthread&fid=' +
        fid)
    soup = BeautifulSoup(resp.content)
    form = soup.find('form', attrs={'id': 'postform'})

    # Step 3: Submit
    # 回复内容
    payload = get_datadic(form)
    payload['subject'] = src['subject']
    payload['message'] = src['content']
    payload['typeid'] = '138'
    #发送post包
    resp = sess.post(host + form['action'], data=payload)
    #获取回帖页面content的HTML

    print_to_file(resp.content)
    #判断回帖后页面是否含有回帖内容,若存在则证明回帖成功,否则失败
    if src['subject'] in resp.content:
        logger.info('Post OK')
    else:
        logger.error('Reply Error: please try again !')
        return ('', str(logger))
    return (resp.url, str(logger))
Beispiel #10
0
Datei: qq.py Projekt: qlmgg/rap
def thumb_up_qq(post_url, src):
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)

    resp = sess.get(src['extra']['target_url'],
                    headers={'Referer': post_url},
                    params={
                        'targetid': post_url.split('/')[-1],
                        'callback': 'ding',
                    })
    logger.info(resp.content)
    if 'Operation too frequent' in resp.content:
        logger.info('Operation too frequent')
        return (False, str(logger))
    return (True, str(logger))
Beispiel #11
0
Datei: sohu.py Projekt: qlmgg/rap
def thumb_up_sohu(post_url, src):
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    resp = sess.get('http://changyan.sohu.com/api/2/comment/action',
                    headers={'Referer': post_url},
                    params={
                        'callback': 'fn',
                        'action_type': 1,
                        'comment_id': src['extra']['comment_id'],
                        'client_id': post_url.split('/')[4],
                        'topic_id': src['extra']['topic_id'],
                        '_': int(time.time() * 1000),
                    })
    logger.info(resp.content)
    return (True, str(logger))
Beispiel #12
0
def post_kdnet(post_url, src):
    """ 凯迪社区发主贴函数

        - Name:     凯迪社区
        - Feature:  club.kdnet.net
        - Captcha:  NO
        - Login:    NO

    @param post_url:   板块地址 如:http://club.kdnet.net/list.asp?boardid=2
    @type post_url:    str

    @param src:        用户名,密码,标题,主帖内容,等等。
    @type src:         dict

    @return:           是否发帖成功,帖子URL
    @rtype:            bool,str

    """
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    # Step 1: 登录
    if not login_kdnet(sess, src):
        logger.error(' Login Error')
        return ('', str(logger))
    logger.info(' Login OK')

    # 获得boardid,作为post参数
    boardid = re.findall(r'boardid=(\d*)',post_url)[0]
    resp = sess.get('http://upfile1.kdnet.net/textareaeditor/post_ubb.asp?action=new&boardid='+boardid)
    soup = BeautifulSoup(resp.content)
    # 获得发帖form
    form = soup.find('form', attrs={'id': 'Dvform'})
    # 构造回复参数
    payload = utils.get_datadic(form)
    payload['topic'] = src['subject'].decode('utf8').encode(CHARSET,'ignore')
    payload['body'] = src['content'].decode('utf8').encode(CHARSET,'ignore')
    payload['font1'] = u'[原创]'.encode(CHARSET,'ignore')
    # 发送发帖post包
    resp = sess.post('http://upfile1.kdnet.net/SavePost_ubb.asp?Action=snew&boardid=' + boardid, data=payload)

    # 若指定字样出现在response中,表示发帖成功
    if u'发帖成功'.encode(CHARSET,'ignore') not in resp.content:
        logger.error(' Post Error')
        return ('', str(logger))
    logger.info(' Post OK')
    url = re.findall(r'var url="(.*?)"',resp.content)[0]
    print url
    return (url, str(logger))
Beispiel #13
0
def reply_kdnet(post_url, src):
    """ 凯迪社区回复函数

        - Name:     凯迪社区
        - Feature:  club.kdnet.net
        - Captcha:  NO
        - Login:    YES

    @param post_url:   帖子地址
    @type post_url:    str

    @param src:        用户名,密码,回复内容,等等。
    @type src:         dict
    
    @return:           是否回复成功
    @rtype:            bool

    """
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    resp = sess.get(post_url)

    post_url = resp.url
    # 获得回复iframe
    iframe = re.findall('<iframe src=\"(.*?)\"', resp.content)[0]
    resp = sess.get(iframe.decode(CHARSET))
    soup = BeautifulSoup(resp.content)
    # 获得回复form
    form = soup.find('form', attrs={'id': 't_form'})
    # 获得boardid,作为post参数
    boardid = re.findall(r'boardid=(.*\d)', post_url)[0]
    # 构造回复参数
    payload = utils.get_datadic(form)
    payload['UserName'] = src['username'].decode('utf8').encode(CHARSET,'ignore')
    payload['password'] = src['password'].decode('utf8').encode(CHARSET,'ignore')
    payload['body'] = src['content'].decode('utf8').encode(CHARSET,'ignore')
    # 回复地址
    reply_url = 'http://upfile1.kdnet.net/do_lu_shuiyin.asp?'\
        + 'action=sre&method=fastreply&BoardID='
    # 发送回复post包
    resp = sess.post(reply_url + boardid, data=payload)
    print resp.content.decode(CHARSET)
    # 若指定字样出现在response中,表示回复成功
    if u'成功回复'.encode(CHARSET,'ignore') not in resp.content:
        logger.error(' Reply Error')
        return (False, str(logger))
    logger.info(' Reply OK')
    return (True, str(logger))
Beispiel #14
0
def post_backchina_forum(post_url, src):
    """ 倍可亲论坛发主贴函数

    @param post_url:   板块地址 如:http://www.backchina.com/forum/37/index-1.html
    @type post_url:    str

    @param src:        用户名,密码,标题,主帖内容,等等。
    @type src:         dict

    @return:           是否发帖成功,帖子URL
    @rtype:            bool,str

    """
    # Returnable logger
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)

    # Step 1: 登录
    if not login_backchina(sess, src):
        logger.error(' Login Error')
        return ('', str(logger))
    logger.info(' Login OK')

    fid = re.findall(r'forum/(\d+)/', post_url)[0]
    resp = sess.get(
        'http://www.backchina.com/forum.php?mod=post&action=newthread&fid=' +
        fid)
    soup = BeautifulSoup(resp.content)
    # 获得发帖form
    form = soup.find('form', attrs={'id': 'postform'})
    # 构造回复参数
    payload = utils.get_datadic(form)
    payload['subject'] = src['subject']
    payload['message'] = src['content']
    # 发送发帖post包
    resp = sess.post(
        'http://www.backchina.com/forum.php?mod=post&action=newthread&fid=' +
        fid + '&extra=&topicsubmit=yes',
        data=payload)

    # 若指定字样出现在response中,表示发帖成功
    if src['subject'] not in resp.content:
        logger.error(' Post Error')
        return ('', str(logger))
    logger.info(' Post OK')
    url = resp.url
    return (url, str(logger))
Beispiel #15
0
def upload_head_backchina_forum(src):
    logger = utils.RAPLogger('Upload head 51_forum=>' + src['username'])
    sess = utils.RAPSession(src)

    # Step 1: 登录
    if not login_backchina(sess, src):
        logger.error('Login Error')
        return ('', str(logger))
    logger.info('Login OK')

    resp = sess.get('http://www.backchina.com/home.php?mod=spacecp&ac=avatar')
    input = urllib.unquote(re.findall(r'input=(.*?)&', resp.content)[0])
    agent = re.findall(r'agent=(.*?)&', resp.content)[0]
    head_url = re.findall(r'<td><img src="(.*?)"', resp.content)[0]
    print 'input:', input
    print 'agent:', agent

    avatar1 = binascii.hexlify(open(src['head'], 'rb').read()).upper()
    avatar2 = avatar1
    avatar3 = avatar1

    params = {
        'm': 'user',
        'inajax': '1',
        'a': 'rectavatar',
        'appid': '14',
        'input': input,
        'agent': agent,
        'avatartype': 'virtual'
    }
    payload = {
        'avatar1': avatar1,
        'avatar2': avatar2,
        'avatar3': avatar3,
        'urlReaderTS': str(time.time() * 1000)
    }
    resp = sess.post('http://backchina-member.com/ucenter/index.php',
                     data=payload,
                     params=params)

    print resp.content
    if 'success="1"' in resp.content:
        logger.info('uploadavatar OK')
        return (head_url, str(logger))
    else:
        logger.info('uploadavatar Error')
        return ('', str(logger))
Beispiel #16
0
def post_creaders_forum(post_url, src):
    """万维论坛发主贴模块

    @param sess:    requests.Session()
    @type sess:     Session

    @param post_url:   帖子地址 如:http://bbs.creaders.net/life/
    @type post_url:    str

    @param src:        用户名,密码,回复内容,等等。
    @type src:         dict

    @return:           是否登录成功
    @rtype:            bool

    """
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)

    url = post_url.rpartition('/')[0] + '/'
    resp = sess.get(url + 'post.php?')
    # 构造回复参数
    payload = {
        'user_name2': src['username'].decode('utf8').encode(CHARSET, 'ignore'),
        'user_password2':
        src['password'].decode('utf8').encode(CHARSET, 'ignore'),
        'captcha': '',
        'trd_subject': src['subject'].decode('utf8').encode(CHARSET, 'ignore'),
        'trd_content': src['content'].decode('utf8').encode(CHARSET, 'ignore')
    }
    # 发送发主贴post包
    # print url+'post.php'
    resp = sess.post(url + 'post.php', data=payload)
    content = resp.content.decode(CHARSET, 'ignore')
    # utils.print_to_file(resp.content)
    # By sniper 2015-2-1
    # 标题中的'('和')'等需要在正则表达式中转义
    # 如:[转帖]ZT) 汉服是FQ闹的大笑话
    subject = re.escape(src['subject'].decode('utf8'))
    href = re.findall(r'<a href=\'(.*?)\' class=\'thread_title\'>' + subject,
                      content)[0]
    url = post_url + href
    # 如果url未成功匹配,则抛出异常,Post Error

    logger.info('Post OK')
    return (url, str(logger))
Beispiel #17
0
def reply_enewstree_forum(post_url, src):
    """ 消息树回复函数

        - Name:     凯迪社区
        - Feature:  club.kdnet.net
        - Captcha:  NO
        - Login:    NO

    @param post_url:   帖子地址
    @type post_url:    str

    @param src:        用户名,密码,回复内容,等等。
    @type src:         dict

    @return:           是否回复成功
    @rtype:            bool

    """
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    # Step 1: 登录
    if not login_enewstree(post_url, sess, src):
        logger.error(' Login Error')
        return ('', str(logger))
    logger.info(' Login OK')

    resp = sess.get(post_url)
    soup = BeautifulSoup(resp.content)
    # 获得回复form
    form = soup.find('form', attrs={'id': 'fastpostform'})
    # 构造回复参数
    payload = utils.get_datadic(form)
    payload['message'] = src['content'].decode('utf8').encode(CHARSET,'ignore'),

    resp = sess.post('http://enewstree.com/discuz/'+form['action'],
                     data=payload,
                     headers = {
                         'Referer':post_url
                     })
    if src['content'].decode('utf8') not in resp.content.decode(CHARSET,'ignore'):
        logger.error(' Reply Error')
        return (False, str(logger))
    logger.info(' Reply OK')
    return (True, str(logger))
Beispiel #18
0
def post_1dpw_forum(post_url, src):
    """ 加国华人网发主贴函数

    @param post_url:   板块地址 如:http://bbs.1dpw.com/forum-71-1.html
    @type post_url:    str

    @param src:        用户名,密码,标题,主帖内容,等等。
    @type src:         dict

    @return:           是否发帖成功,帖子URL
    @rtype:            bool,str

    """
    host = utils.get_host(post_url)
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    # Step 1: 登录
    if not login_1dpw(post_url, sess, src):
        logger.error(' Login Error')
        return ('', str(logger))
    logger.info(' Login OK')

    resp = sess.get(post_url)
    soup = BeautifulSoup(resp.content)
    # 获得回复form
    form = soup.find('form', attrs={'id': 'fastpostform'})
    # 构造回复参数
    payload = utils.get_datadic(form)
    payload['subject'] = src['subject']
    payload['message'] = src['content']
    payload['posttime'] = int(time.time())
    # 发送登录post包
    resp = sess.post(host + form['action'] + '&inajax=1', data=payload)
    # 若指定字样出现在response中,表示发帖成功
    if '主题已发布' not in resp.content:
        logger.error(' Post Error')
        return ('', str(logger))
    logger.info(' Post OK')
    url = host + re.findall(r'succeedhandle_fastnewpost\(\'(.*?)\'', resp.content)[0]
    print url
    return (url, str(logger))
Beispiel #19
0
def thumb_up_dwnews(post_url, src={}):
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    resp = sess.get('http://blog.dwnews.com/index.php',
                    params={
                        'r':
                        'club/clubzan',
                        'id':
                        re.findall('(\d+)', post_url)[0],
                        'type':
                        'nolikes' if src['extra']['like'] == 'false'
                        or src['extra']['like'] == 'False' else 'likes',
                        'callback':
                        '?',
                    })
    logger.info(resp.content)
    if 'success' not in resp.content:
        logger.error('Thumb Up Error')
        return (False, str(logger))
    logger.info('Thumb Up OK')
    return (True, str(logger))
Beispiel #20
0
def reply_unitedtimes(post_url, src):
    """ 澳洲联合网回复函数

        - Name:     澳洲联合网
        - Feature:  unitedtimes.com.au/
        - Captcha:  NO
        - Login:    NO

    @param post_url:   帖子地址
    @type post_url:    str

    @param src:        用户名,密码,回复内容,等等。
    @type src:         dict
    
    @return:           是否回复成功
    @rtype:            bool

    """
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    resp = sess.get(post_url)

    # 获得回复iframe
    iframe = re.findall('<iframe src=\"(.*?)\"', resp.content)[0]
    resp = sess.get(iframe.decode(CHARSET))
    soup = BeautifulSoup(resp.content)
    # 获得回复form
    form = soup.find('form', attrs={'method': 'post'})
    # 构造回复参数
    payload = utils.get_datadic(form)
    payload['content'] = src['content']
    # 发送回复post包
    resp = sess.post(form['action'], data=payload)
    # 若指定字样出现在response中,表示回复成功
    if '操作成功' not in resp.content:
        logger.error(' Reply Error')
        return (False, str(logger))
    logger.info(' Reply OK')
    return (True, str(logger))
Beispiel #21
0
def reply_creaders_news(post_url, src):
    logger = utils.RAPLogger(post_url)
    host = utils.get_host(post_url)
    s = utils.RAPSession(src)

    r = s.get(post_url)
    payload = {
        'news_id': re.findall('news_id=(\d+)', r.content)[0],
        'r_nid': re.findall('r_nid=(\d+)', r.content)[0],
        'username': src['username'],
        'password': src['password'],
        'replyid': 0,
        # The charset of this page is `gb2312` absolutely, but it seems that
        # `saytext` receives `utf8` only.
        'saytext': src['content'],
    }
    r = s.post(host + '/headline/postcomment.php', data=payload)
    if u'评论成功'.encode('gb2312') not in r.content:
        logger.error('Reply Error')
        return (False, str(logger))
    logger.info('Reply OK')
    return (True, str(logger))
Beispiel #22
0
def reply_penchinese_blog(post_url, src):
    """ 独立中文笔会博客回复函数

        - Name:     独立中文笔会
        - Feature:  club.kdnet.net
        - Captcha:  NO
        - Login:    YES

    @param post_url:   帖子地址
    @type post_url:    str

    @param src:        用户名,密码,回复内容,等等。
    @type src:         dict
    
    @return:           是否回复成功
    @rtype:            bool

    """
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    resp = sess.get(post_url)

    soup = BeautifulSoup(resp.content)
    # 获得回复form
    form = soup.find('form', attrs={'id': 'commentform'})
    # 构造回复参数
    payload = utils.get_datadic(form)
    payload['author'] = src['username']
    payload['email'] = src['password']
    payload['comment'] = src['content']
    # 发送回复post包
    resp = sess.post(form['action'], data=payload)
    print resp.url
    # 若指定字样出现在response中,表示回复成功
    if resp.url == form['action']:
        logger.error(' Reply Error')
        return (False, str(logger))
    logger.info(' Reply OK')
    return (True, str(logger))
Beispiel #23
0
def reply_creaders_forum(post_url, src):
    """万维论坛回复模块
    @author: sky
    @since: 2014-11-27
    @param post_url:   帖子地址
    @type post_url:    str

    @param src:        用户名,密码,回复内容,等等。
    @type src:         dict

    @return:           是否登录成功
    @rtype:            bool

    """

    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)

    # step 2: 获取回帖页面
    resp = sess.get(post_url)

    # step 3: 提交回帖
    # 回复内容
    payload = {
        'user_name2': src['username'].decode('utf8').encode(CHARSET),
        'user_password2': src['password'].decode('utf8').encode(CHARSET),
        'captcha': '',
        'btrd_subject': src['content'].decode('utf8').encode(CHARSET),
        'btrd_content': src['content'].decode('utf8').encode(CHARSET)
    }
    # 发送post包
    resp = sess.post(post_url, data=payload)
    #判断回帖后页面是否含有回帖内容,若存在则证明回帖成功,否则失败
    if src['content'].decode('utf8').encode(CHARSET) in resp.content:
        logger.info('Reply OK')
    else:
        logger.error('Reply Error')
        return (False, str(logger))
    return (True, str(logger))
Beispiel #24
0
def reply_1dpw_forum(post_url, src):
    """ 加国华人网发回复函数(10个字符)

    @param post_url:   帖子地址
    @type post_url:    str

    @param src:        用户名,密码,内容,等等。
    @type src:         dict

    @return:           是否回复成功
    @rtype:            bool

    """
    host = utils.get_host(post_url)
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    # Step 1: 登录
    if not login_1dpw(post_url, sess, src):
        logger.error(' Login Error')
        return (False, str(logger))
    logger.info(' Login OK')

    resp = sess.get(post_url)
    soup = BeautifulSoup(resp.content)
    # 获得回复form
    form = soup.find('form', attrs={'id': 'fastpostform'})
    # 构造回复参数
    payload = utils.get_datadic(form)
    payload['message'] = src['content']
    payload['posttime'] = int(time.time())
    # 发送登录post包
    resp = sess.post(host + form['action'] + '&inajax=1', data=payload)
    # 若指定字样出现在response中,表示发帖成功
    if 'Database' not in resp.content:
        logger.error(' Reply Error')
        return (False, str(logger))
    logger.info(' Reply OK')
    return (True, str(logger))
Beispiel #25
0
def reply_powerapple_forum(post_url, src):

    # Returnable logger
    logger = utils.RAPLogger(post_url)
    host = utils.get_host(post_url)
    sess = utils.RAPSession(src)

    # Step 1: 登录
    if not login_powerapple(sess, src):
        logger.error(' Login Error')
        return (False, str(logger))
    logger.info(' Login OK')
    # Step 2: Load post page
    # 获取所需发帖页面,查找与{'id':'fastpostform'}匹配的form标签
    resp = sess.get(post_url)
    soup = BeautifulSoup(resp.content)
    form = soup.find('form', attrs={'id': 'fastpostform'})

    # Step 3: Submit
    # 回复内容
    payload = get_datadic(form)
    if 'subject' in src:
        payload['subject'] = src['subject']
    payload['message'] = src['content']

    #发送post包
    resp = sess.post(host + form['action'], data=payload)
    #获取回帖页面content的HTML
    soup = BeautifulSoup(resp.content)

    #判断回帖后页面是否含有回帖内容,若存在则证明回帖成功,否则失败
    if src['content'] in resp.content:
        logger.info('Reply OK')
    else:
        logger.error('Reply Error: please try again !')
        return (False, str(logger))
    return (True, str(logger))
Beispiel #26
0
def get_account_info_dwnews_blog(src):
    """ 多维账户信息获取函数

    @param src:        用户名,密码
    @type src:         dict

    @return:           账户信息
    @rtype:            dict
    """
    logger = utils.RAPLogger(src['username'])
    sess = utils.RAPSession(src)

    # Step 1: 登录
    if not login_dwnews(sess, src):
        logger.error(' Login Error')
        return ({}, str(logger))
    logger.info(' Login OK')

    resp = sess.get('http://blog.dwnews.com/myinfo.html')

    soup = BeautifulSoup(resp.content)
    head_image = soup.select('div.portrait img')[0]['src']

    account_score = ''
    account_class = ''

    time_register = re.findall(r'注册时间:(.*?)</div>', resp.content)[0]
    time_last_login = re.findall(r'上次登录时间:(.*?) </div>', resp.content)[0]

    login_count = ''

    count_post = re.findall(r'文章<span>\((\d+)\)</span>', resp.content)[0]
    count_reply = re.findall(r'评论<span>\((\d+)\)</span>', resp.content)[0]

    account_info = {
        #########################################
        # 用户名
        'username': src['username'],
        # 密码
        'password': src['password'],
        # 头像图片
        'head_image': head_image,
        #########################################
        # 积分
        'account_score': account_score,
        # 等级
        'account_class': account_class,
        #########################################
        # 注册时间
        'time_register': time_register,
        # 最近登录时间
        'time_last_login': time_last_login,
        # 登录次数
        'login_count': login_count,
        #########################################
        # 主帖数
        'count_post': count_post,
        # 回复数
        'count_reply': count_reply
        #########################################
    }
    logger.info('Get account info OK')
    return (account_info, str(logger))
Beispiel #27
0
def post_dwnews_blog(post_url, src):
    """ 多维社区发主贴函数

        - Name:     多维社区
        - Feature:  http://blog.dwnews.com/
        - Captcha:  NO
        - Login:    NO

    @param post_url:   板块地址 如:http://blog.dwnews.com/
    @type post_url:    str

    @param src:        用户名,密码,标题,主帖内容,等等。
    @type src:         dict

    @return:           是否发帖成功,帖子URL
    @rtype:            bool,str

    """
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)
    # Step 1: 登录
    if not login_dwnews(sess, src):
        logger.error(' Login Error')
        return ('', str(logger))
    logger.info(' Login OK')
    # Step 2: 验证用户,取得Token
    resp = sess.get(
        'http://blog.dwnews.com/index.php?r=user/checkMember&callback=?')
    csrf_token = re.findall(r'"CsrfToken":"(.*?)"',
                            resp.content)[0].replace('\\', '')
    logger.info('csrf_token: ' + csrf_token)

    # 回复
    payload = {
        'title': src['subject'],
        'content': '<p>' + src['content'] + '</p>',
        'tag': '时事',
        'catid': '5',
        'facebook': '0',
        'twitter': '0',
        'linkedin': '0',
        'google': '0',
        'CsrfToken': csrf_token
    }
    resp = sess.post('http://blog.dwnews.com/index.php?r=club/post',
                     data=payload,
                     headers={
                         'Accept':
                         'application/json, text/javascript, */*; q=0.01',
                         'Referer': 'http://blog.dwnews.com/mytopic',
                         'X-Requested-With': 'XMLHttpRequest',
                     })
    # 若指定字样出现在response中,表示发帖成功
    if 'success' not in resp.content:
        logger.info(resp.content)
        logger.error(' Post Error')
        return ('', str(logger))
    resp = sess.get('http://blog.dwnews.com/index.php?r=club/makehtml&catid=5')
    if 'ok' not in resp.content:
        logger.info(resp.content)
        logger.error(' Post Error')
        return ('', str(logger))
    logger.info(' Post OK')
    resp = sess.get('http://blog.dwnews.com/mytopic')
    soup = BeautifulSoup(resp.content)
    url = soup.select('div.loadMore li a[href^="http"]')[0]['href']
    return (url, str(logger))
Beispiel #28
0
def get_account_info_eulam_forum(src):
    """ 欧浪账户信息获取函数

    @param src:        用户名,密码
    @type src:         dict

    @return:           账户信息
    @rtype:            dict
    """
    logger = utils.RAPLogger(src['username'])
    sess = utils.RAPSession(src)

    # Step 1: 登录
    if not login_eulam_forum(sess, src):
        logger.error(' Login Error')
        return ({}, str(logger))
    logger.info(' Login OK')

    resp = sess.get('http://bbs.eulam.com/user/Profile.asp?UserName='******'username'])

    head_image = 'http://bbs.eulam.com/css/css1/images/photobg.gif'

    html = resp.content.decode(CHARSET, 'ignore').encode('utf8')

    account_score = re.findall(r'<li>用户魅力:(\d+)</li>', html)[0]
    account_class = re.findall(r'<li>用户角色:(.*?)</li>', html)[0]

    time_register = re.findall(r'<li>注册时间:(.*?)</li>', html)[0]
    year = time.strftime('%Y', time.localtime(time.time()))
    time_last_login = year + '-' + re.findall(r'<li>上次登录:(.*?)</li>', html)[0]

    login_count = re.findall(r'<li>登录次数:(\d+)</li>', html)[0]

    count_post = re.findall(r'<li>发表原贴:(\d+)</li>', html)[0]
    count_reply = re.findall(r'<li>发表回贴:(\d+)</li>', html)[0]

    account_info = {
        #########################################
        # 用户名
        'username': src['username'],
        # 密码
        'password': src['password'],
        # 头像图片
        'head_image': head_image,
        #########################################
        # 积分
        'account_score': account_score,
        # 等级
        'account_class': account_class,
        #########################################
        # 注册时间
        'time_register': time_register,
        # 最近登录时间
        'time_last_login': time_last_login,
        # 登录次数
        'login_count': login_count,
        #########################################
        # 主帖数
        'count_post': count_post,
        # 回复数
        'count_reply': count_reply
        #########################################
    }
    logger.info('Get account info OK')
    return (account_info, str(logger))
Beispiel #29
0
def get_account_info_sina_club(src):
    """ 新浪账户信息获取函数

    @param src:        用户名,密码
    @type src:         dict

    @return:           账户信息
    @rtype:            dict
    """
    logger = utils.RAPLogger(src['username'])
    sess = utils.RAPSession(src)

    # Step 1: 登录
    if not login_sina(sess, src):
        logger.error(' Login Error')
        return ({}, str(logger))
    logger.info(' Login OK')

    resp = sess.get('http://club.mil.news.sina.com.cn/memcp.php')

    soup = BeautifulSoup(resp.content)
    head_image = soup.select('div.avatar img')[0]['src']

    html = resp.content.decode(CHARSET).encode('utf8')
    account_score = re.findall(r'<li>积分: (\d+)</li>', html)[0]
    account_class = re.findall(
        r'<label>用户组:</label> <font color="green">(.*?)</font>', html)[0]

    time_register = re.findall(r'<label>注册日期:</label>(.*?)</li>', html)[0]
    time_last_login = re.findall(r'<label>上次访问:</label>(.*?)</li>', html)[0]

    login_count = ''

    count_post = re.findall(r'<li>帖子: (\d+)', html)[0]
    count_reply = re.findall(r'<li>精华: (\d+)', html)[0]

    account_info = {
        #########################################
        # 用户名
        'username': src['username'],
        # 密码
        'password': src['password'],
        # 头像图片
        'head_image': head_image,
        #########################################
        # 积分
        'account_score': account_score,
        # 等级
        'account_class': account_class,
        #########################################
        # 注册时间
        'time_register': time_register,
        # 最近登录时间
        'time_last_login': time_last_login,
        # 登录次数
        'login_count': login_count,
        #########################################
        # 主帖数
        'count_post': count_post,
        # 回复数
        'count_reply': count_reply
        #########################################
    }
    logger.info('Get account info OK')
    return (account_info, str(logger))
Beispiel #30
0
def reply_sina_club(post_url, src):
    """ 新浪论坛回复函数

        - Name:     新浪论坛18646492184
        - Feature:  (forum|club).*.sina.com.cn
        - Captcha:  YES
        - Login:    YES

    @param post_url:   帖子地址
    @type post_url:    str

    @param src:        用户名,密码,回复内容,等等。
    @type src:         dict
    
    @return:           是否回复成功
    @rtype:            bool

    """
    logger = utils.RAPLogger(post_url)
    sess = utils.RAPSession(src)

    # Step 1: 登录
    if not login_sina(sess, src):
        logger.error(' Login Error')
        return (False, str(logger))
    logger.info(' Login OK')

    # Step 2: 回复
    resp = sess.get(post_url)
    host = utils.get_host(post_url)
    # 获取回复地址
    reply_url = re.findall(r'id=\"postform\" action=\"(.*?)\"',
                           resp.content)[0]
    soup = BeautifulSoup(resp.content)
    # 获取回复form
    form = soup.find('form', attrs={'id': 'postform'})
    # 构造回复参数
    payload = utils.get_datadic(form)
    payload['message'] = src['content'].decode('utf8').encode(CHARSET)
    # 替换回复地址中的特殊符号
    reply_url = reply_url.replace('&amp;', '&')
    # 发送回复post包
    resp = sess.post(reply_url,
                     data=payload,
                     headers={
                         'Origin': utils.get_host(post_url),
                         'Referer': post_url
                     })
    post_times = 0
    # 验证是否成功,如果失败再次发送
    # 失败可能原因:验证码错误
    while 'postform' not in resp.content \
            and post_times < src['TTL']:
        # 限制最大发送次数
        post_times = post_times + 1
        logger.info(' reply need captcha')
        # 获取验证码图片
        captcha = sess.get(host + 'seccode.php',
                           headers={
                               'Accept': config.accept_image,
                               'Referer': reply_url
                           })
        # 获取验证码字符串
        seccode = utils.crack_captcha(captcha.content)
        logger.info(' seccode:' + seccode)
        # 回复参数中增加验证码
        payload['seccodeverify'] = seccode.decode(CHARSET)
        # 发送回复post包
        resp = sess.post(reply_url,
                         data=payload,
                         headers={
                             'Origin': utils.get_host(post_url),
                             'Referer': post_url
                         })
    # 若指定字样出现在response中,表示回复成功
    if 'postform' not in resp.content:
        logger.error(' Reply Error')
        return (False, str(logger))
    logger.info(' Reply OK')
    return (True, str(logger))