I've just upgraded my account to the "Hacker" account as I want to have a script running that will collect some JSON data from an API I have on another site I host, check it for some conditions and post an update to twitter if they match.
Sometimes the script is making the call to the API correctly, but other times I'm getting a [Errno socket error] [Errno -2] Name or service not known
error. It's producing the error every second time so, otherwise it works as expected.
Below is the code. It's running in a virtualenv with urllib, tweepy, and requests[security] installed via pip
from urllib import urlopen
import json
import datetime, time
import tweepy
#Twitter
consumer_key = 'REMOVED'
consumer_secret = 'REMOVED'
access_token = 'REMOVED'
access_token_secret = 'REMOVED'
#last unique id used for tweet
vendor_tracks = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
#Full name for appending to tweet
vendor_name = ['Devrim Kay in the EDZ', 'MIDA Mini-Tool at Devrim Kay', 'Sloane on Titan', 'Failsafe on Nessus', 'Asher Mir on Io', 'Man O War at Asher Mir', 'Tyra', 'Drang at Tyra Karn', 'Commander Zavala at The Tower', 'Lord Shaxx at The Tower', 'Banshee-44 at The Tower', 'Ikora Rey at The Tower', 'Benedict 99-40 at The Tower', 'Lakshmi-2 at The Tower', 'Executor Hideo at The Tower', 'Arach Jalaal at The Tower', 'The Emissary at The Third Spire']
#URL of API call
url = "https://api.vendorengrams.xyz/getVendorDrops?key=REMOVED"
#Function to get JSON
def get_jsonparsed_data(url):
response = urlopen(url)
data = str(response.read())
return json.loads(data)
#Function To Send Tweet
def sendTweet(vendor, id_passed):
vendor_unique_period = id_passed
print "Unique Period is: " + str(vendor_unique_period)
if vendor_unique_period != vendor_tracks[vendor]:
vendor_tracks[vendor] = vendor_unique_period
current_time = datetime.datetime.now()
seconds = current_time.second
minutes = current_time.minute
if minutes < 30:
minutes = 30 - (minutes + 1)
seconds = 60 - seconds
else:
minutes = 60 - (minutes + 1)
seconds = 60 - seconds
if seconds == 60:
seconds = 0
minutes = minutes + 1
time_string = str(minutes) + "m "
if seconds != 0:
time_string = time_string + str(seconds) + "s"
mid_part = "300PL gear"
if vendor == 1 or vendor == 5 or vendor == 7:
mid_part = "at 300PL"
tweet = vendor_name[vendor] + " is dropping " + mid_part + " for the next " + time_string
try:
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
api.update_status(tweet)
except Exception as e:
print("TwitterError: " + str(e))
while True:
try:
returned_drops = get_jsonparsed_data(url)
print "Collected Data at " + time.asctime( time.localtime(time.time()))
for vendor in returned_drops:
if vendor['type'] == 3 and vendor['verified'] == 1:
sendTweet(vendor['vendor'], vendor['id'])
time.sleep(30)
except Exception as e:
pass
print("There was an error: " + str(e))
time.sleep(180)