Skip to content

Instantly share code, notes, and snippets.

@thisiskeanyvy
Created October 5, 2021 15:18
Show Gist options
  • Save thisiskeanyvy/3b597b5c684634f5b56877148c7eaa39 to your computer and use it in GitHub Desktop.
Save thisiskeanyvy/3b597b5c684634f5b56877148c7eaa39 to your computer and use it in GitHub Desktop.
Github autolike
"""
Code by: Keany Vy KHUN
Description: Call github api to GET random repo
"""
#pip3 install selenium
#pip3 install requests
#pip3 install json
"""
Note: Download chrome drivers (selenium) at https://chromedriver.chromium.org/downloads
Choose the right version of google-chrome
"""
import requests, json
from requests.packages.urllib3.exceptions import InsecureRequestWarning
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from time import sleep
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
MAX_per_page = "1000" #max value for per page
MAX_page = "10" #max value for page
token = "your_github_oauth_token" #your github oauth token
per_page = MAX_per_page #url param
page = MAX_page #url param
lang = "c" #select by prog langage
#your github login
username = 'your_github_username'
password = 'your_github_password'
#selenium conf
chrome_options = webdriver.ChromeOptions()
#chrome_options.add_argument("--headless")
chrome_options.add_argument("--log-level=3")
driver = webdriver.Chrome("./chromedriver", options=chrome_options)
driver.set_window_size(1024, 650)
"""def rand_lang():
lang = ['python', 'java', 'javascript', 'c', 'c++']"""
def login():
try:
driver.get("https://github.com/login")
sleep(5)
driver.find_element_by_xpath('//*[@id="login_field"]').send_keys(username)
sleep(2)
driver.find_element_by_xpath('//*[@id="password"]').send_keys(password)
sleep(2)
driver.find_element_by_xpath('/html/body/div[3]/main/div/div[4]/form/div/input[12]').click()
sleep(20)
except:
print("login failed retry")
sleep(5)
login()
def call_api(i):
i = str(i)
api_users = f"https://api.github.com/search/repositories?q=language:{lang}&per_page={per_page}&page={page}"+"?access_token="+token
get_random_users = requests.get(url=api_users)
data_users = get_random_users.json()
get_users(data_users)
def get_users(data_users):
for i in range(len(data_users["items"])):
username = data_users["items"][i]["owner"]["login"]
get_repo(username)
if i < int(MAX_page):
i = i + 1
call_api(i)
else:
print("End of tasks...")
exit()
def get_repo(username):
api_repo = "https://api.github.com/users/"+username+"/repos"+"?access_token="+token
get_repo_from_user = requests.get(url=api_repo)
data_repo = get_repo_from_user.json()
for i in range(len(data_repo)):
repo = data_repo[i]["html_url"]
like(repo)
print(repo)
print("""
-------------------------------------
-------------------------------------
""")
def like(repo):
try:
driver.get(repo)
except:
print("Error GET url")
sleep(5)
driver.get(repo)
try:
sleep(5)
driver.find_element_by_xpath("/html/body/div[4]/div/main/div[1]/div[1]/ul/li[2]/div/form[2]/button").click()
sleep(2)
except:
print("Already liked")
sleep(10)
try:
driver.find_element_by_xpath("/html/body/div[4]/div/main/div[1]/div[1]/ul/li[2]/div/form[1]/button").click()
except:
print("unbale to find button")
sleep(2)
try:
driver.find_element_by_xpath("/html/body/div[4]/div/main/div[1]/div[1]/ul/li[2]/div/form[2]/button").click()
except:
print("unbale to find button")
sleep(5)
"""
Get users
https://api.github.com/search/repositories?q=language:java&per_page=1000&page=10
MAX
"""
"""
Get Repos
https://api.github.com/users/donnemartin/repos
REPLACE donnemartin by user get api
"""
if __name__ == "__main__":
login()
i = 1
call_api(i)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment