Advertisement
Readdeo

Pokeminer0.2 db.py V0.4 - FB MSG

Jul 28th, 2016
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.14 KB | None | 0 0
  1. import time
  2. import csv
  3. import os
  4. import json
  5. import time
  6. import fbchat
  7. from datetime import datetime
  8. from datetime import timedelta
  9. from sqlalchemy.orm import sessionmaker
  10. from sqlalchemy import create_engine
  11. from sqlalchemy.ext.declarative import declarative_base
  12. from sqlalchemy import Column, Integer, String
  13. from sqlalchemy.sql import not_
  14. from pushbullet import Pushbullet
  15.  
  16. try:
  17. import config
  18. DB_ENGINE = config.DB_ENGINE
  19. except ImportError, AttributeError:
  20. DB_ENGINE = 'sqlite:///db.sqlite'
  21.  
  22. def get_engine():
  23. return create_engine(DB_ENGINE)
  24.  
  25. Base = declarative_base()
  26.  
  27.  
  28. class Sighting(Base):
  29. __tablename__ = 'sightings'
  30.  
  31. id = Column(Integer, primary_key=True)
  32. pokemon_id = Column(Integer)
  33. spawn_id = Column(String(32))
  34. expire_timestamp = Column(Integer)
  35. normalized_timestamp = Column(Integer)
  36. lat = Column(String(16))
  37. lon = Column(String(16))
  38.  
  39.  
  40. Session = sessionmaker(bind=get_engine())
  41.  
  42. def pkmn_time_text(time):
  43. s = (time - datetime.utcnow()).total_seconds()
  44. (m, s) = divmod(s, 60)
  45. (h, m) = divmod(m, 60)
  46. d = timedelta(hours = h, minutes = m, seconds = s)
  47. disappear_time = datetime.now() + d
  48. return "Available until %s (%dm %ds)." % (disappear_time.strftime("%H:%M:%S"),m,s)
  49.  
  50.  
  51. def normalize_timestamp(timestamp):
  52. return int(float(timestamp) / 120.0) * 120
  53.  
  54. def get_pokemon_name(pokemon_id):
  55. if not hasattr(get_pokemon_name, 'names'):
  56. file_path = os.path.join(os.getcwd()+'/pokemon.json')
  57.  
  58. with open(file_path, 'r') as f:
  59. get_pokemon_name.names = json.loads(f.read())
  60.  
  61. return get_pokemon_name.names[str(pokemon_id)]
  62.  
  63. def gmaps_link(lat, lng):
  64. latLon = '{},{}'.format(repr(lat), repr(lng))
  65. return 'http://maps.google.com/maps?q={}'.format(latLon)
  66.  
  67.  
  68. with open('locales/pokemon.en.json') as f:
  69. pokemon_names = json.load(f)
  70.  
  71.  
  72. def add_sighting(session, spawn_id, pokemon):
  73. obj = Sighting(
  74. pokemon_id=pokemon['id'],
  75. spawn_id=spawn_id,
  76. expire_timestamp=pokemon['disappear_time'],
  77. normalized_timestamp=normalize_timestamp(pokemon['disappear_time']),
  78. lat=pokemon['lat'],
  79. lon=pokemon['lng'],
  80. )
  81. # Check if there isn't the same entry already
  82. existing = session.query(Sighting) \
  83. .filter(Sighting.pokemon_id == obj.pokemon_id) \
  84. .filter(Sighting.spawn_id == obj.spawn_id) \
  85. .filter(Sighting.expire_timestamp > obj.expire_timestamp - 10) \
  86. .filter(Sighting.expire_timestamp < obj.expire_timestamp + 10) \
  87. .filter(Sighting.lat == obj.lat) \
  88. .filter(Sighting.lon == obj.lon) \
  89. .first()
  90. if existing:
  91. return
  92. session.add(obj)
  93.  
  94. #write to CSV
  95. dt = pokemon['disappear_time']+7200 # +7200 needed to match my timezone
  96. if dt < time.time()+7200: # +7200 needed to match my timezone
  97. dt = time.time()+7320
  98. f = open(os.getcwd()+'\spawn_locationPminer.csv', "a")
  99. out = csv.writer(f, delimiter=",")
  100. out.writerow([str(pokemon['id']),str(pokemon['lat']),str(pokemon['lng']),str(dt)])
  101. f.close()
  102.  
  103. # PUSHBULLET part
  104.  
  105. # 1,7,10,11,13,14,15,16,17,18,19,20,21,22,29,30,32,35,39,41,42,43,44,46,47,48,49,50,51,52,60,69,81,82,90,92,93,96,98,99,100,109,113,114,116,118,120,124,129,133
  106. mydict = {'Bulbasaur':1,'Ivysaur':2,'Venusaur':3,'Charmander':4,'Charmeleon':5,'Charizard':6,
  107. 'Squirtle':7,'Wartortle':8,'Blastoise':9,'Caterpie':10,'Metapod':11,'Butterfree':12,
  108. 'Weedle':13,'Kakuna':14,'Beedrill':15,'Pidgey':16,'Pidgeotto':17,'Pidgeot':18,'Rattata':19,
  109. 'Raticate':20,'Spearow':21,'Fearow':22,'Ekans':23,'Arbok':24,'Pikachu':25,'Raichu':26,
  110. 'Sandshrew':27,'Sandlash':28,'Nidoran M':29,'Nidorina':30,'Nidoqueen':31,'Nidoran F':32,
  111. 'Nidorino':33,'Nidoking':34,'Clefairy':35,'Clefable':36,'Vulpix':37,'Ninetales':38,
  112. 'Jigglypuff':39,'Wigglypuff':40,'Zubat':41,'Golbat':42,'Oddish':43,'Gloom':44,'Vileplume':45,
  113. 'Paras':46,'Parasect':47,'Venomat':48,'Venomoth':49,'Diglett':50,'Dugtrio':51,'Meowth':52,
  114. 'Persian':53,'Psyduck':54,'Golduck':55,'Mankey':56,'Primeape':57,'Growlithe':58,'Arcanine':59,
  115. 'Poliwag':60,'Poliwhirl':61,'Poliwrath':62,'Abra':63,'Kadabra':64,'Alakazam':65,'Machop':66,
  116. 'Machoke':67,'Machamp':68,'Bellsprout':69,'Weepinbell':70,'Victreebell':71,'Tentacool':72,'Tentacruel':73,
  117. 'Geodude':74,'Graveler':75,'Golem':76,'Ponyta':77,'Rapidash':78,'Slowpoke':79,'Slowbro':80,'Magnemite':81,
  118. 'Magneton':82,'FarfetchD':83,'Doduo':84,'Dodrio':85,'Seel':86,'Dewgong':87,'Grimer':88,'Muk':89,'Shellder':90,
  119. 'Cloyster':91,'GAstly':92,'Haunter':93,'Gengar':94,'Onix':95,'Drowzee':96,'Hypno':97,'Krabby':98,'Kingler':99,
  120. 'Voltorb':100,'Electrode':101,'Exeggcute':102,'Exeggutor':103,'Cubone':104,'Marowak':105,'Hitmonlee':106,
  121. 'Hitmonchan':107,'Lickitung':108,'Koffing':109,'Weezing':110,'Rhyhorn':111,'Rhydon':112,'Chansey':113,
  122. 'Tangela':114,'Kangaskhan':115,'Horsea':116,'Seadra':117,'Goldeen':118,'Seaking':119,'Staryu':120,
  123. 'Starmie':121,'MrMime':122,'Scyther':123,'Jynx':124,'Electabuzz':125,'Magmar':126,'Pinsir':127,'Tauros':128,
  124. 'Magikarp':129,'Gyarados':130,'Lapras':131,'Ditto':132,'Eevee':133,'Vaporeon':134,'Jolteon':135,'Flareon':136,
  125. 'Porygon':137,'Omanyte':138,'Omastar':139,'Kabuto':140,'Kabutops':141,'Aerodactyl':142,'Snorlax':143,'Articuno':144,
  126. 'Zapdos':145,'Moltres':146,'Dratini':147,'Dragonair':148,'Dragonite':149,'Mewtwo':150,'Mew':151}
  127. pokename = mydict.keys()[mydict.values().index(pokemon['id'])]
  128.  
  129. expsec = int(pokemon['disappear_time'] - time.time())
  130. m, s = divmod(expsec, 60)
  131. expat = datetime.fromtimestamp(pokemon['disappear_time']).strftime('%H:%M')
  132.  
  133. google_maps_link = gmaps_link(pokemon["lat"], pokemon["lng"])
  134. negativetime = ') '
  135. if pokemon['disappear_time'] < time.time():
  136. negativetime = ') Negative time bug, dunno exp time'
  137. try:
  138. pb = Pushbullet("PUSHBULLET TOKEN HERE")
  139. except:
  140. pass
  141.  
  142. #Here you can filter what to show:
  143. goodlist = [4,5,6,9,16,24,25,26,36,37,38,53,58,59,74,75,76,77,78,83,87,88,89,91,94,97,101,102,103,104,105,
  144. 110,111,112,115,126,127,128,130,131,134,135,136,137,138,139,140,141,142,143,144,145,
  145. 146,147,148,149,150,151]
  146.  
  147. if int(pokemon['id']) in goodlist:
  148. try:
  149. print 'FB MSG, PUSHBULLET'
  150.  
  151. client = fbchat.Client('YOUR USER ID', 'YOUR PASSWORD')
  152. sent = client.send('FRIEND USER ID', 'A wild ' + pokename.title() + ' has appeared! '+'\n'
  153. +'Expires in: '+str(m)+'m'+str(s)+'s ('+str(expat)+negativetime+'\n'+
  154. google_maps_link)
  155. print 'FB msg sent'
  156. push = pb.push_link('A wild ' + pokename.title() + ' has appeared in Kaposvar!',google_maps_link,
  157. 'Expires in: '+str(m)+'m'+str(s)+'s ('+str(expat)+negativetime)
  158. except:
  159. print 'INVALIDKEY'
  160. pass
  161. else:
  162. print 'Not in Goodlist'
  163. pass
  164.  
  165.  
  166. # Here you can filter what not to show:
  167. # thrashlist = [1,7,10,11,13,14,15,16,17,18,19,20,21,22,29,30,32,35,39,41,42,43,44,46,47,48,49,
  168. # 50,51,52,60,69,81,82,90,92,93,96,98,99,100,109,113,114,116,118,120,124,129,133]
  169. # if pokemon['id'] in thrashlist:
  170. # pass
  171. # else:
  172. # try:
  173. # print 'asd'
  174. # push = pb.push_link('A wild ' + pokename.title() + ' has appeared!',google_maps_link, 'Expires in: #'+str(m)+'m'+str(s)+'s ('+str(expat)+') '+negativetime)
  175. # except:
  176. # pass
  177.  
  178. def get_sightings(session):
  179. query = session.query(Sighting) \
  180. .filter(Sighting.expire_timestamp > time.time())
  181. trash_list = getattr(config, 'TRASH_IDS')
  182. if trash_list:
  183. query = query.filter(not_(Sighting.pokemon_id.in_(config.TRASH_IDS)))
  184. return query.all()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement