Main
Main
/usr/bin/env python3
VERSION = '3.8'
try:
import argparse, requests, phonenumbers, time, sys, os, webbrowser, folium
from json import loads
from packaging import version
from os import name
from prettytable import PrettyTable
from instaloader import *
from phonenumbers import carrier, geocoder, timezone
parser = argparse.ArgumentParser()
parser.add_argument('-n', '--number', type=str, help='do information gathering
phone numbers')
parser.add_argument('-g', '--github', type=str, help='do information gathering
github account')
parser.add_argument('-i', '--ip', type=str, help='do information gathering ip
address')
parser.add_argument('-ig', '--instagram', type=str, help='do information gathering
instagram account')
parser.add_argument('--update', action='store_true', help='check update')
parser.add_argument('--login', action='store_true', help='login your instagram
account[REQUIRED]')
parser.add_argument('--change', action='store_true', help='change your username and
password')
parser.add_argument('-u', '--username', type=str, help='your username')
parser.add_argument('-p', '--password', type=str, help='your password')
args = parser.parse_args()
class Collector:
def __init__(self):
self.Banner()
""")
def Asking_else(self):
print("[-] Collector can't understand what do you mean")
time.sleep(2)
print("[-] Collector has been stopped")
sys.exit()
# this is main function
def Main(self):
if args.number:
phone_number = phonenumbers.parse(args.number)
phone_number_national = phonenumbers.format_number(phone_number,
phonenumbers.PhoneNumberFormat.NATIONAL)
phone_number_international = phonenumbers.format_number(phone_number,
phonenumbers.PhoneNumberFormat.INTERNATIONAL)
isp = carrier.name_for_number(phone_number, 'en')
time_zone = timezone.time_zones_for_number(phone_number)
location = geocoder.description_for_number(phone_number, 'en')
elif args.github:
username = args.github
url = f'https://api.github.com/users/{username}'
response = requests.get(url)
if response.status_code == 200 and requests.codes.ok:
data = response.json()
print( f'[!] Fetching on github account : {username}')
for i in data:
print(f'[+] {i} : ',data[i])
elif args.ip:
ip = args.ip
url = f'https://ipapi.co/{ip}/json/'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
lat = data['latitude']
lon = data['longitude']
for i in data:
print(f'[+] {i} : ',data[i])
else:
pass
elif args.update:
META_URL =
'https://raw.githubusercontent.com/galihap76/collector/main/metadata.json'
req_meta = requests.get(META_URL, timeout=5)
if req_meta.status_code == 200:
metadata = req_meta.text
json_data = loads(metadata)
version_collector = json_data['version']
if ask_update.lower() == 'y':
newVersion =
requests.get("https://raw.githubusercontent.com/galihap76/collector/main/main.py")
open("main.py", "wb").write(newVersion.content)
print("[+] New version downloaded")
print('[!] Collector will be restarting in 5 seconds...')
time.sleep(5)
quit()
else:
pass
else:
print('[+] Already up to date')
elif args.instagram:
print('[+] Waiting...')
username_read = open('username.txt', 'r')
password_read = open('password.txt', 'r')
L = instaloader.Instaloader()
username = args.instagram
L.login(username_read.read(), password_read.read())
profile = instaloader.Profile.from_username(L.context, username)
private = profile.is_private
posts = profile.get_posts()
full_name = profile.full_name
business = profile.is_business_account
url = profile.external_url
business_type = profile.business_category_name
check_story = profile.has_public_story
# ask if user want to see some follower accounts but this if not
private account
if private == False:
ask_followers = input('[!] Do you want to see some follower
accounts?[y/n]: ')
if ask_followers.lower() == 'y':
print('[+] Waiting...')
total_followers = profile.followers
Table_follower_accounts = PrettyTable(["FOLLOWER ACCOUNTS"])
for follower in profile.get_followers():
Table_follower_accounts.add_row([follower])
print(Table_follower_accounts)
print(f'[+] Total followers : {total_followers}')
elif ask_followers.lower() == 'n':
pass
else:
self.Asking_else()
# ask if user want to see some following accounts but this if not
private account
if private == False:
ask_followings = input('[!] Do you want to see some following
accounts?[y/n]: ')
if ask_followings.lower() == 'y':
print('[+] Waiting...')
total_followings = profile.followees
Table_following_accounts = PrettyTable(["FOLLOWING ACCOUNTS"])
for following in profile.get_followees():
Table_following_accounts.add_row([following])
print(Table_following_accounts)
print(f'[+] Total followings : {total_followings}')
elif ask_followings.lower() == 'n':
pass
else:
self.Asking_else()
if ask_like_post.lower() == 'y':
print(f'[!] You need to visit on username {username} and select
one of the posts')
time.sleep(2)
url_instagram = f'https://www.instagram.com/{username}'
for item in list(os.environ.keys()):
if "ANDROID" in item.upper():
os.system("termux-open-url \""+url_instagram+"\"")
while True:
url_post = input('[!] Please copy the shortlink
[https://www.instagram.com/p/(JUST COPY THE SHORTLINK)/]: ')
if url_post == '':
self.Asking_else()
else:
print('[+] Waiting...')
P = instaloader.Post.from_shortcode(L.context,
url_post)
Table = PrettyTable(["PEOPLE WHO LIKED THE POST"])
total_likes = P.likes
for like in P.get_likes():
Table.add_row([like.username])
print(Table)
print(f'[+] Total likes : {total_likes}')
if ask_again.lower() == 'y':
continue
elif ask_again.lower() == 'n':
break
# ask if user want to download posts and profile picture but this if
not private account
if private == False:
downloads = input('[!] Do you want to download all posts and
profile picture?[y/n]: ')
if downloads.lower() == 'y':
print('[+] Ready to download all posts and profile picture...')
L.download_profile(username, profile_pic_only = True)
for index, post in enumerate(posts, 1):
L.download_post(post, target=f"{profile.username}_{index}")
print('[+] For all results has been stored in : ',os.getcwd())
print('[+] Success for scraping')
elif args.login:
username_create = open("username.txt", "a")
username_create.write(args.username)
username_create.close()
elif args.change:
username_change = open('username.txt', 'w')
username_change.write(args.username)
username_change.close()