def run(msg): """ Returns an image from the frinkiac search engine. """ image = tempfile.NamedTemporaryFile(delete=False, suffix='.png') message = re.match('^(simpsons\:) (.*)', msg['text'], re.IGNORECASE) searchterm = message.group(2) searchurl = "https://frinkiac.com/api/search?q=" + percent_encode(searchterm) # Return first result...might want to make this configurable. searchresult = requests.get(searchurl).json()[0] print("SEARCHRESULT: ", searchresult) imageurl = "https://frinkiac.com/meme/" + searchresult['Episode'] + "/" + str(searchresult['Timestamp']) + ".jpg" print("Downloading & sending image: ", imageurl) response = requests.get(imageurl) image.write(response.content) image.close() print('') # Initialize the first return value tuple with the image itself - we'll add the subtitles after results = ({'action': 'send_photo', 'payload': image.name},) # Grab the captions and append them to the tuple captionurl = "https://frinkiac.com/api/caption?e=" + searchresult['Episode'] + "&t=" + str(searchresult['Timestamp']) captions = requests.get(captionurl) for subtitle in captions.json()['Subtitles']: results = results + ({'action': 'send_msg', 'payload': subtitle['Content']},) # Return our image and the associated captions return results
def test_can_percent_encode_list(): encoded = percent_encode(["knife&fork", "spoon"]) assert encoded == "knife%26fork&spoon"
def test_can_percent_encode_string(): encoded = percent_encode("foo") assert encoded == "foo"
def test_can_percent_encode_number(): encoded = percent_encode(12) assert encoded == "12"
def test_can_percent_encode_empty_string(): encoded = percent_encode("") assert encoded == ""
def test_can_percent_encode_none(): encoded = percent_encode(None) assert encoded is None
def test_can_percent_encode_extended_chars(): encoded = percent_encode("/El Niño/") assert encoded == "%2FEl%20Ni%C3%B1o%2F"
def test_can_percent_encode_reserved_chars(): encoded = percent_encode("20% of $100 = $20") assert encoded == "20%25%20of%20%24100%20%3D%20%2420"
def test_can_percent_encode_dictionary(): encoded = percent_encode(OrderedDict([("one", 1), ("two", 2)])) assert encoded == "one=1&two=2"
def test_can_percent_encode_with_safe_chars(): encoded = percent_encode("/El Niño/", safe="/|\\") assert encoded == "/El%20Ni%C3%B1o/"