Skip to content

Instantly share code, notes, and snippets.

@vinodpandey
Forked from jamesbvaughan/postmates.py
Created March 7, 2017 09:48
Show Gist options
  • Save vinodpandey/be0b79a22b42eeb59d5b1ff5d2c5235b to your computer and use it in GitHub Desktop.
Save vinodpandey/be0b79a22b42eeb59d5b1ff5d2c5235b to your computer and use it in GitHub Desktop.

Revisions

  1. @jamesbvaughan jamesbvaughan created this gist Mar 7, 2017.
    60 changes: 60 additions & 0 deletions postmates.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,60 @@
    #!/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()