Advertisement
Guest User

instagram_tool

a guest
Oct 22nd, 2015
5,008
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.04 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from requests import get
  4. from time import sleep
  5. from math import pi, cos, sqrt
  6. from datetime import datetime
  7. from winsound import Beep as beep
  8. from sys import exit
  9.  
  10.  
  11. api_key = "000000000.0000xx0.00x0000000xx00x0x00xxx0x0xxxx0x0"
  12.  
  13. offset = 24 * 60 * 60
  14. radius = 1000
  15. output_border = 60
  16.  
  17.  
  18. if api_key == "000000000.0000xx0.00x0000000xx00x0x00xxx0x0xxxx0x0":
  19.     print 'YOU NEED REAL INSTAGRAM ACCESS TOKEN'
  20.     exit()
  21.  
  22.  
  23. def get_user_id(username):
  24.     answer = get('https://api.instagram.com/v1/users/search?q=' + username + '&access_token=' + api_key, verify=True).json()
  25.     if answer['data'] != []:
  26.         return answer['data'][0]['id']
  27.  
  28.  
  29. def get_data_from_json(json_text):
  30.     answer = list()
  31.     for element in json_text['data']:
  32.         answer.append(element)
  33.     return answer
  34.  
  35.  
  36. def get_media(username):
  37.     answer = list()
  38.     user_id = get_user_id(username)
  39.     data = get('https://api.instagram.com/v1/users/' + user_id + '/media/recent/?access_token=' + api_key, verify=True).json()
  40.     try:
  41.         if data[u'meta'][u'code'] == 200:
  42.             if data[u'pagination'] == {}:
  43.                 answer += get_data_from_json(data)
  44.             else:
  45.                 answer += get_data_from_json(data)
  46.                 while True:
  47.                     if data[u'pagination'] != {}:
  48.                         data = get(data[u'pagination'][u'next_url'], verify=True).json()
  49.                         answer += get_data_from_json(data)
  50.                     else:
  51.                         break
  52.         else:
  53.             answer = list()
  54.     except:
  55.         answer = list()
  56.     return answer
  57.  
  58.  
  59. def get_users_from_json(data_input):
  60.     data_answer = list()
  61.     for i in xrange(len(data_input[u'data'])):
  62.         data_answer.append(data_input[u'data'][i][u'username'])
  63.     return data_answer
  64.  
  65.  
  66. def get_insta_followers(seed_user):
  67.     answer = list()
  68.     try:
  69.         seed_user_id = get_user_id(seed_user)
  70.         data = get("https://api.instagram.com/v1/users/" + seed_user_id + "/followed-by?access_token=" + api_key, verify=True).json()
  71.         if data[u'meta'][u'code'] == 200:
  72.             if data[u'pagination'] == {}:
  73.                 answer += get_users_from_json(data)
  74.             else:
  75.                 answer += get_users_from_json(data)
  76.                 while True:
  77.                     if data[u'pagination'] != {}:
  78.                         data = get(data[u'pagination'][u'next_url'], verify=True).json()
  79.                         answer += get_users_from_json(data)
  80.                     else:
  81.                         break
  82.         else:
  83.             answer = list()
  84.     except:
  85.         answer = list()
  86.     return answer
  87.  
  88.  
  89. def get_insta_friends(seed_user):
  90.     answer = list()
  91.     try:
  92.         seed_user_id = get_user_id(seed_user)
  93.         data = get("https://api.instagram.com/v1/users/" + seed_user_id + "/follows?access_token=" + api_key, verify=True).json()
  94.         if data[u'meta'][u'code'] == 200:
  95.             if data[u'pagination'] == {}:
  96.                 answer += get_users_from_json(data)
  97.             else:
  98.                 answer += get_users_from_json(data)
  99.                 while True:
  100.                     if data[u'pagination'] != {}:
  101.                         data = get(data[u'pagination'][u'next_url'], verify=True).json()
  102.                         answer += get_users_from_json(data)
  103.                     else:
  104.                         break
  105.         else:
  106.             answer = list()
  107.     except:
  108.         answer = list()
  109.     return answer
  110.  
  111.  
  112. def get_associated_users(username):
  113.     return list(set(get_insta_followers(username) + get_insta_friends(username)))
  114.  
  115.  
  116. def latitude_to_meters(lat):
  117.     return float(lat) * float(111111)
  118.  
  119.  
  120. def timestamp_to_time(timestamp):
  121.     return datetime.fromtimestamp(float(timestamp)).strftime('%Y-%m-%d %H:%M:%S')
  122.  
  123.  
  124. def longitude_to_meters(lon):
  125.     return 6371000.0 * pi / 180 * cos(lon * pi / 180)
  126.  
  127.  
  128. def is_in_one_zone(lat_target, long_target, lat_user, long_user, zone_radius):
  129.     latitude_target_m = latitude_to_meters(lat_target)
  130.     longitude_target_m = longitude_to_meters(long_target)
  131.     latitude_user_m = latitude_to_meters(lat_user)
  132.     longitude_user_m = longitude_to_meters(long_user)
  133.     path = sqrt(abs(latitude_target_m - latitude_user_m) ** 2 + abs(longitude_target_m - longitude_user_m) ** 2)
  134.     if path <= zone_radius:
  135.         return True
  136.     else:
  137.         return False
  138.  
  139.  
  140. def is_in_same_time(target_timestamp, friend_timestamp, time_offset):
  141.     target_timestamp = int(target_timestamp)
  142.     friend_timestamp = int(friend_timestamp)
  143.     timestamps_range = range(target_timestamp - time_offset, target_timestamp + time_offset) + range(friend_timestamp - time_offset, friend_timestamp + time_offset)
  144.     timestamp_set = list(set(timestamps_range))
  145.     if len(timestamp_set) < len(timestamps_range):
  146.         return True
  147.     else:
  148.         return False
  149.  
  150.  
  151. def nice_printer(border, title, string):
  152.     print title + ' ' * (border - len(title) - len(string)) + string
  153.  
  154.  
  155. def get_target_dict(all_media):
  156.     answer = dict()
  157.     if all_media != []:
  158.         answer.update({'username': all_media[0]['user']['username']})
  159.         locations = []
  160.         for element in all_media:
  161.             str_location = str(element['location'])
  162.             if str(element['location']) != u'None' and 'latitude' in str_location and 'longitude' in str_location and 'name' in str_location:
  163.                 locations.append({'placename': element['location']['name'], 'lat': element['location']['latitude'], 'long': element['location']['longitude'], 'time': element['created_time']})
  164.         answer.update({'locations': locations})
  165.         return answer
  166.  
  167.  
  168. def get_users_dicts(all_users):
  169.     answer = list()
  170.     for user in all_users:
  171.         user_media = get_media(user)
  172.         answer.append(get_target_dict(user_media))
  173.         sleep(1)
  174.     return answer
  175.  
  176. target = str(raw_input('target user: '))
  177.  
  178. nice_printer(output_border, '[Target user]:', target)
  179. target_media = get_media(target)
  180.  
  181. nice_printer(output_border, '[Found]:', str(len(target_media)) + ' media of target user')
  182. all_users = get_associated_users(target)
  183.  
  184. beep(1000, 100)
  185.  
  186. clear_users = []
  187. for raw_user in all_users:
  188.     json_answer = get('https://api.instagram.com/v1/users/search?q=' + raw_user + '&access_token=' + api_key, verify=True).json()
  189.     if json_answer['data'] != list():
  190.         clear_users.append(raw_user)
  191.  
  192. nice_printer(output_border, '[Found]:', str(len(clear_users)) + ' friends of target user')
  193.  
  194. beep(1000, 100)
  195.  
  196. target_places = get_target_dict(target_media)
  197. users_places = get_users_dicts(clear_users)
  198.  
  199. beep(1000, 100)
  200.  
  201.  
  202. for target_place in target_places['locations']:
  203.     for user_places in users_places:
  204.         if str(user_places) != 'None':
  205.             for place in user_places['locations']:
  206.                 zone_flag = is_in_one_zone(target_place['lat'], target_place['long'], place['lat'], place['long'], 1000)
  207.                 time_flag = is_in_same_time(target_place['time'], place['time'], 1000)
  208.                 if zone_flag and time_flag:
  209.                     print '\n' + '#' * output_border
  210.                     nice_printer(output_border, '[Users]:', target_places['username'] + ' and ' + user_places['username'])
  211.                     print '-' * output_border
  212.                     nice_printer(output_border, '[Place]:', target_place['placename'])
  213.                     nice_printer(output_border, '', place['placename'])
  214.                     print '-' * output_border
  215.                     nice_printer(output_border, '[Time]:', str(timestamp_to_time(target_place['time'])))
  216.                     nice_printer(output_border, '', str(timestamp_to_time(place['time'])))
  217.                     print '-' * output_border
  218.                     nice_printer(output_border, '[Coordinates]:', 'Target: [lat: ' + str(target_place['lat']) + ' long: ' + str(target_place['long']) + ']')
  219.                     nice_printer(output_border, '', 'User:   [lat: ' + str(place['lat']) + ' long: ' + str(place['long']) + ']')
  220.                     print '-' * output_border
  221.  
  222. beep(1000, 100)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement