Created
October 5, 2021 15:18
-
-
Save thisiskeanyvy/3b597b5c684634f5b56877148c7eaa39 to your computer and use it in GitHub Desktop.
Github autolike
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
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