Skip to content

Instantly share code, notes, and snippets.

@carter-yagemann
Created January 13, 2017 17:54
Show Gist options
  • Save carter-yagemann/9bdc8f51cd8965943787b194cbd29c37 to your computer and use it in GitHub Desktop.
Save carter-yagemann/9bdc8f51cd8965943787b194cbd29c37 to your computer and use it in GitHub Desktop.
Patreon Tracker to Google Drive Spreadsheet
###################################################################################
## Patreon Tracker ##
## ##
## Copyright (c) 2015 Carter Yagemann ##
## ##
## Permission is hereby granted, free of charge, to any person obtaining a copy ##
## of this software and associated documentation files (the "Software"), to deal ##
## in the Software without restriction, including without limitation the rights ##
## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ##
## copies of the Software, and to permit persons to whom the Software is ##
## furnished to do so, subject to the following conditions: ##
## ##
## The above copyright notice and this permission notice shall be included in ##
## all copies or substantial portions of the Software. ##
## ##
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ##
## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ##
## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ##
## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ##
## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ##
## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ##
## THE SOFTWARE. ##
###################################################################################
from lxml import html
import requests
import time
import json
import gspread
from oauth2client.client import SignedJwtAssertionCredentials
# Config
##########################
token_path = '/some/path/to/token.json'
spreadsheet_key = '00000000000000000000000000000000000000000000'
# Authenticates with GDrive and gets the tracker spreadsheet
# Returns spreadsheet
def init():
json_key = json.load(open(token_path))
scope = ['https://spreadsheets.google.com/feeds']
credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope)
gc = gspread.authorize(credentials)
return gc.open_by_key(spreadsheet_key)
# Scrapes the data for one patreon account
# [sheet_name, account_name]
def scrape_patreon(input):
try:
# Fetch HTML page
page = requests.get('https://www.patreon.com/' + input[1])
tree = html.fromstring(page.text)
# Scrape data
patrons = tree.xpath('//div[@id="totalPatrons"]/text()')[0].strip()
total_earnings = tree.xpath('//span[@id="totalEarnings"]/text()')[0].strip()
date = time.strftime("%m/%d/%Y")
# Get worksheet
worksheet = spreadsheet.worksheet(input[0])
# Append data to end of worksheet
worksheet.insert_row([date, total_earnings, patrons], worksheet.row_count + 1)
except:
print 'Failed to scrape:', input[0]
##############################
# Main #
##############################
spreadsheet = init()
scrape_patreon(['sheet1', 'patreon_account_1'])
scrape_patreon(['sheet2', 'patreon_account_2'])
gspread>=0.2.5
lxml>=3.4.4
pyOpenSSL>=0.15.1
requests>=2.4.3
requests-oauthlib>=0.4.2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment