• Welcome to OGBoards 10.0, keep in mind that we will be making LOTS of changes to smooth out the experience here and make it as close as possible functionally to the old software, but feel free to drop suggestions or requests in the Tech Support subforum!

Script for those running PM games

barrpet11

New member
Joined
Jul 15, 2011
Messages
70
Reaction score
2
Location
Winston-Salem, NC
Wrote a shitty python3 script for Sheep. May be useful to someone else in the future.
Also of note: md5 over regular http. Hope no one is using their password here anywhere else.

Code:
# ogboards.com PM scraper
# Written by barrpet11
# Last updated 2015-08-18 04:20:50

# INSTRUCTIONS
# Enter username and password for ogboards for the script to work (lines 23-24)
# Run the script and look for the output file in the same directory

import sys
import hashlib
import requests
import re
import csv

# ogboards.com info
username = ''
password = ''
BASE_URL = 'http://www.ogboards.com/forums/'

# Set up a new session
session = requests.Session()
login_response = session.post(BASE_URL + 'login.php?do=login', {
    'vb_login_username':        username,
    'vb_login_password':        '',
    'vb_login_md5password':     hashlib.md5(password.encode()).hexdigest(),
    'vb_login_md5password_utf': hashlib.md5(password.encode()).hexdigest(),
    'cookieuser': 1,
    'do': 'login',
    's': '',
    'securitytoken': 'guest'
})

# Exit on request error
login_response.raise_for_status()

# Check for login success
if login_response.text.find('Thank you for logging in') < 0:
    sys.exit('Login unsuccessful.')

# Download all PM's as csv
pm_response = session.get(BASE_URL + 'private.php?do=downloadpm&dowhat=csv',
    headers = { 'Referer': 'http://www.ogboards.com/forums/private.php'
})

# Exit on request error
login_response.raise_for_status()

# Check for PM download success
if pm_response.text.find('Date,Folder') < 0:
    sys.exit('PM download unsuccessful.')

# Save PMs txt to file
pm_file = open('pm_download.csv', 'w')
pm_file.write(pm_response.text)
pm_file.close()

################################################################################
# SHEEP SPECIFIC                          
################################################################################

# Process the PMs
# NOTE
# This is pretty bad but I did it fast and it should work well enough
# Will remove numbers from entries:
# '1. example' and '1) example' become 'example'
# Will have to manually correct some entries if people added lines that
# weren't answers (will take all lines, even if > 12)

# TODO: fix this nasty shit
regx_lines = re.compile('[\r]*\n')
regx_nums = re.compile('^[0-9]{1,2}[.\)]+[\t\ ]+', re.MULTILINE)
ret = list()
with open('pm_download.csv', newline='') as f:
    reader = csv.reader(f)
    for pm in reader:
        if pm[1] == 'Inbox':
            pm_timestamp = pm[0] #TODO: check date/time (last 3/4/5 days?)
            pm_subject = pm[2]
            pm_from = pm[3]
            pm_msg = pm[5]
            pm_msg = regx_nums.sub('', pm_msg)
            pm_items = regx_lines.split(pm_msg)
            pm_items = list(filter(None, pm_items))
            if len(pm_items) >= 12:
                result = list()
                result.append(pm_timestamp)
                result.append(pm_from)
                result.extend(pm_items)
                ret.append(result)

# Write the csv to file
out_file = open('sheep_poll.csv', 'w')
wr = csv.writer(out_file, quoting=csv.QUOTE_ALL)
for poll in ret:
    wr.writerow(poll)
print('Success!\nPolling saved to sheep_poll.csv.')
 
Back
Top