Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.32 KB | None | 0 0
  1. import logging
  2. import hangups
  3. import plugins
  4. import asyncio
  5.  
  6. import googlemaps
  7.  
  8. logger = logging.getLogger(__name__)
  9.  
  10. from textblob import TextBlob
  11. from urllib.parse import quote
  12.  
  13. def _initialise(bot):
  14. plugins.register_handler(_handle_message, type="message")
  15.  
  16. def _handle_message(bot, event, command):
  17. raw_text = " ".join(event.text.split())
  18. directions = ["how", "long", "take", "to", "from"]
  19. if all(x in raw_text.lower() for x in directions):
  20. yield from _getdirections(bot, event, raw_text, directions)
  21.  
  22. @asyncio.coroutine
  23. def _getdirections(bot, event, text, type):
  24. logger.info("Directions from text: " + text)
  25. try:
  26. mapskey = bot.get_config_option("maps_api_key")
  27. except:
  28. logger.error("Something went wrong getting the API key. Check it and reload.")
  29. return
  30. if not mapskey.startswith("AIza"):
  31. logger.error("Your API key is wrong, apparently. Check it and reload.")
  32. return
  33.  
  34. bicycling = ["by bicycling","via bicycling", "by cycling","via cycling", "by bike","via bike", "a bicycle", "to cycle"]
  35. walking = ["on foot", "by walking","via walking", "to walk", "by foot","via foot"]
  36. transit = ["by public transport","via public transport"]
  37. train = ["by train","via train"]
  38. bus = ["by bus","via bus"]
  39. subway = ["by subway", "on the subway", "by the subway", "via subway", "via the subway"]
  40. tram = ["via tram", "via light rail","by tram", "by light rail","on the tram", "on the light rail"]
  41.  
  42. try:
  43. regionbias = bot.get_config_option("directions_geobias")
  44. except:
  45. regionbias = ""
  46.  
  47. routeMode = "driving"
  48. transitMode = ""
  49.  
  50. logger.info("text:" + text)
  51. text = TextBlob(text)
  52. for s in text.sentences:
  53. if any(x in s for x in transit):
  54. routeMode = "transit"
  55. for f in transit:
  56. s = s.replace(f, "")
  57. elif any(x in s for x in bicycling):
  58. routeMode = "bicycling"
  59. for f in bicycling:
  60. s = s.replace(f, "")
  61. elif any(x in s for x in walking):
  62. routeMode = "walking"
  63. for f in walking:
  64. s = s.replace(f, "")
  65. elif any(x in s for x in train):
  66. routeMode = "transit"
  67. transitMode = "train"
  68. for f in train:
  69. s = s.replace(f, "")
  70. elif any(x in s for x in bus):
  71. routeMode = "transit"
  72. transitMode = "bus"
  73. for f in bus:
  74. s = s.replace(f, "")
  75. elif any(x in s for x in subway):
  76. routeMode = "transit"
  77. transitMode = "subway"
  78. for f in subway:
  79. s = s.replace(f, "")
  80. elif any(x in s for x in tram):
  81. routeMode = "transit"
  82. transitMode = "tram"
  83. for f in tram:
  84. s = s.replace(f, "")
  85.  
  86. logger.info(s)
  87. if all(x in s.lower() for x in type):
  88. dFrom = s.lower().words.index(type[-1])
  89. dTo = [i for i, x in enumerate(s.lower().words) if x == type[-2]][-1]
  90.  
  91. if dFrom + 1 < dTo:
  92. origin = " ".join(s.words[dFrom + 1:dTo])
  93. destination = " ".join(s.words[dTo + 1:])
  94. elif dTo + 1 < dFrom:
  95. destination = " ".join(s.words[dTo + 1:dFrom])
  96. origin = " ".join(s.words[dFrom + 1:])
  97.  
  98. gmaps = googlemaps.Client(key=mapskey)
  99.  
  100. dirs = gmaps.directions(origin, destination, mode=routeMode, region=regionbias, transit_mode=transitMode)
  101.  
  102. logger.info("origin/destination/mode/region/transit_mode:" + "/" + origin + "/" + destination + "/" + routeMode + "/" + regionbias + "/" + transitMode)
  103.  
  104. try:
  105. dirs1 = dirs[0]
  106. dirlegs = dirs1["legs"]
  107. dirleg = dirlegs[0]
  108. duration = dirleg["duration"]
  109. time = duration["text"]
  110. startAddr = dirleg["start_address"]
  111. endAddr = dirleg["end_address"]
  112. mapsUrl = "https://www.google.com/maps?f=d&saddr=" + quote(startAddr) + "&daddr=" + quote(endAddr)
  113. routeUrlParams = {"walking":"w","transit":"r","bicycling":"b"}
  114. logger.info(dirs1)
  115. logger.info(dirleg)
  116. logger.info(dirs)
  117. if routeMode: mapsUrl = mapsUrl + "&dirflg=" + routeUrlParams[routeMode]
  118. yield from bot.coro_send_message(event.conv, "Looks like it'll take you " + time + " to get from " + startAddr + " to " + endAddr + '. [<a href="' + mapsUrl + '" >maps</a>]')
  119. except IndexError:
  120. logger.error(dirs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement