Created
October 4, 2014 01:49
-
-
Save Lucretiel/603a8a3a07e8f874e8d8 to your computer and use it in GitHub Desktop.
Monitor a kickstarter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from bs4 import BeautifulSoup | |
from requests import get as http_get | |
from datetime import datetime | |
from time import sleep, perf_counter as now | |
import argparse | |
def get_properties(url): | |
''' | |
returns the number of backers, and total amount backed | |
''' | |
soup = BeautifulSoup(http_get(url).content) | |
return ( | |
int(soup.find(itemprop='Project[backers_count]') | |
.text.replace(',', '')), | |
int(soup.find(itemprop='Project[pledged]') | |
.text.lstrip('$').replace(',', ''))) | |
def generate_properties(url, sleeptime): | |
''' | |
Repeatedly yield the properties (backers, pledged) of a kickstarter. Only | |
yields when the properties change. Only poll the page every sleeptime | |
seconds | |
''' | |
previous = None | |
while True: | |
start = now() | |
prop = get_properties(url) | |
if prop != previous: | |
yield prop | |
previous = prop | |
sleep(max(0, sleeptime - (now() - start))) | |
parser = argparse.ArgumentParser(epilog='''This project lets you poll a | |
kickstarter project, to keep in touch with how it is doing. It polls every | |
''') | |
arg = parser.add_argument | |
arg('-f', '--freq', help="Frequency in seconds to poll for updates", type=float, | |
default=60) | |
arg('url', help="URL of the Kickstarter project to poll") | |
def main(args): | |
args = parser.parse_args(args[1:]) | |
for backers, pledge in generate_properties(args.url, args.freq): | |
print(datetime.now().isoformat(), backers, pledge) | |
if __name__ == '__main__': | |
from sys import argv | |
main(argv) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment