LINUX.ORG.RU

История изменений

Исправление Siado, (текущая версия) :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  getlor.py
#
# http://www.linux.org.ru/forum/talks/10069358?lastmod=1390061311824


from urllib2 import urlopen
from BeautifulSoup import BeautifulSoup
from cookielib import MozillaCookieJar
import requests


class GetTheLOR():
    def __init__(self, getnum=1000000, cookiefile="cookies.txt", pw=''):
        self.getnum = getnum
        self.cookiefile = cookiefile
        self.cookiejar = MozillaCookieJar()
        self.passwd = pw
        self.lorurl = u'http://www.linux.org.ru'

    def get_last_lorpost_url():
        '''
        return url like that:
        u'http://www.linux.org.ru/forum/general/10069764?lastmod=1390065794661'
        '''

        tracker_page = urlopen(self.lorurl+'/tracker/').read()

        last_post_url = BeautifulSoup(tracker_page) \
            .find(u'table', {u'class':u'message-table'}) \
            .findAll(u'a')[1][u'href']

        return lor + last_post_url

    def get_last_msgid(url):
        '''
        return last message id string
        '''
        page = urlopen(url).read()
        lastid=BeautifulSoup(page) \
            .findAll(u'article',{u'class':u'msg'})[-1][u'id'] \
            .split(u'-')[1]
        return lastid

    def get_the_lor():
        '''
        post the lorget message with autoban
        '''
        cookies = self.cookiejar.load(self.cookiefile)

        url = self.lorurl + '/add.jsp'
        csrf = BeautifulSoup(requests.get(url+u'?group=8404' \
            ,cookies=cookies).text) \
            .find(u'input',{u'name':u'csrf'})[u'value']

        data={u'noinfo':u'false',
            u'group':u'8404',
            u'title':str(self.getnum),
            u'msg':u"%s/forum/talks/%s\n\n%s" % (self.lorurl,
                self.getnum, self.passwd),
            u'tags':"",
            u'draft':"",
            u'csrf':csrf
        }
        return requests.post(url, data, cookies=cookies)

    def check_and_make_get():
        last_msgid = self.get_last_msgid()
        if int(last_msgid) == self.getnum-1:
            return self.get_the_lor()
        else:
            return 0

Привел к более читабельному виду, добавил автозабан.

З.ы. код не тестил, возможны баги.

Исходная версия Siado, :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  getlor.py
#
# http://www.linux.org.ru/forum/talks/10069358?lastmod=1390061311824


from urllib2 import urlopen
from BeautifulSoup import BeautifulSoup
from cookielib import MozillaCookieJar
import requests


class GetTheLOR():
    def __init__(self, getnum=1000000, cookiefile="cookies.txt", pw=''):
        self.getnum = getnum
        self.cookiefile = cookiefile
        self.cookiejar = MozillaCookieJar()
        self.passwd = pw
        self.lorurl = u'http://www.linux.org.ru'

    def get_last_lorpost_url():
        '''
        return url like that:
        u'http://www.linux.org.ru/forum/general/10069764?lastmod=1390065794661'
        '''

        tracker_page = urlopen(self.lorurl+'/tracker/').read()

        last_post_url = BeautifulSoup(tracker_page) \
            .find(u'table', {u'class':u'message-table'}) \
            .findAll(u'a')[1][u'href']

        return lor + last_post_url

    def get_last_msgid(url):
        '''
        return last message id string
        '''
        page = urlopen(url).read()
        lastid=BeautifulSoup(page) \
            .findAll(u'article',{u'class':u'msg'})[-1][u'id'] \
            .split(u'-')[1]
        return lastid

    def get_the_lor():
        '''
        post the lorget message with autoban
        '''
        cookies = self.cookiejar.load(self.cookiefile)

        url = self.lorurl + '/add.jsp'
        csrf = BeautifulSoup(requests.get(url+u'?group=8404' \
            ,cookies=cookies).text) \
            .find(u'input',{u'name':u'csrf'})[u'value']

        data={u'noinfo':u'false',
            u'group':u'8404',
            u'title':str(self.getnum),
            u'msg':u"%s/forum/talks/%s\n\n%s" % (self.lorurl,
                self.getnum, self.passwd),
            u'tags':"",
            u'draft':"",
            u'csrf':csrf
        }
        return requests.post(url, data, cookies=cookies)

    def check_and_make_get():
        last_msgid = self.get_last_msgid()
        if int(last_msgid) == self.getnum-1:
            return self.get_the_lor()
        else:
            return 0

Привел к более читабельному виду, добавил автозабан.

З.ы. код не тестил, возможны баги.