Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
#!/usr/bin/env python
from bs4 import BeautifulSoup
from twilio.rest import TwilioRestClient
import json
import os
import re
import requests
url = 'https://postmates.com/los-angeles'
def sendText(body):
account_sid = os.environ['TWILIO_ACCOUNT_SID']
auth_token = os.environ['TWILIO_AUTH_TOKEN']
twilio_number = os.environ['TWILIO_PHONE_NUMBER']
number_file = os.environ['POSTMATES_NUMBERS']
client = TwilioRestClient(account_sid, auth_token)
with open(number_file, 'r') as numbers:
for number in numbers:
client.messages.create(body=body, to=number, from_=twilio_number)
def extractFreeFoodFromSoup(soup):
regex = re.compile('free')
strings = list(soup.stripped_strings)
freeFood = [s for s in strings if regex.match(s.lower())]
return freeFood
def hasNewFreeFood(freeFood):
try:
foodFile = open('/tmp/freefood', 'r+')
previousFreeFood = json.load(foodFile)
except (FileNotFoundError, json.decoder.JSONDecodeError):
foodFile = open('/tmp/freefood', 'w+')
previousFreeFood = []
foodFile.seek(0)
foodFile.truncate()
json.dump(freeFood, foodFile)
foodFile.close()
return freeFood != previousFreeFood
def main():
postmatesPage = requests.get(url)
soup = BeautifulSoup(postmatesPage.text, 'html.parser')
freeFood = extractFreeFoodFromSoup(soup)
if hasNewFreeFood(freeFood):
sendText('Free Postmates!\n\n' + '\n'.join(freeFood))
if __name__ == '__main__':
main()
@ckllr

This comment has been minimized.

Copy link

ckllr commented Mar 8, 2017

Are you running this script with Python 2.7+?

@andrewelkins

This comment has been minimized.

Copy link

andrewelkins commented Mar 9, 2017

It's probably over kill for this, but if you want to play around with a nosql store instead of a file, try tinydb https://tinydb.readthedocs.io/en/latest/

@trentandraka

This comment has been minimized.

Copy link

trentandraka commented Mar 9, 2017

What does 'POSTMATES_NUMBERS' represent?

@timkofu

This comment has been minimized.

Copy link

timkofu commented Mar 14, 2017

SQLite is perfect for logging hits, and you'll have data workable via SQL, for something in the future you absolutely hadn't thought of right now.

@jamesbvaughan

This comment has been minimized.

Copy link
Owner Author

jamesbvaughan commented Mar 23, 2017

@ckllr I'm running it with Python 3+

@jamesbvaughan

This comment has been minimized.

Copy link
Owner Author

jamesbvaughan commented Mar 23, 2017

@andrewelkins Oh that looks cool, I'll try it out. Thanks!

@jamesbvaughan

This comment has been minimized.

Copy link
Owner Author

jamesbvaughan commented Mar 23, 2017

@trentandraka It's the path to a file that contains a list of the phone numbers of some friends of mine who wanted to get the same text updates I was getting

@jamesbvaughan

This comment has been minimized.

Copy link
Owner Author

jamesbvaughan commented Mar 23, 2017

@timkofu That's a good point. I'm sure that I could think of some cool project to do with the data once I've collected a bunch of it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.