Skip to content

Instantly share code, notes, and snippets.

@jamesbvaughan
Created March 7, 2017 08:29
Show Gist options
  • Save jamesbvaughan/4c501fc99acb75852756a4d1dfc8ca3d to your computer and use it in GitHub Desktop.
Save jamesbvaughan/4c501fc99acb75852756a4d1dfc8ca3d to your computer and use it in GitHub Desktop.
#!/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()
@jamesbvaughan
Copy link
Author

@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
Copy link
Author

@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