Kaynağa Gözat

initial commit

master
Haku 3 yıl önce
işleme
0468ecfe3d
2 değiştirilmiş dosya ile 89 ekleme ve 0 silme
  1. +1
    -0
      .gitignore
  2. +88
    -0
      login2.py

+ 1
- 0
.gitignore Dosyayı Görüntüle

@@ -0,0 +1 @@
.idea/

+ 88
- 0
login2.py Dosyayı Görüntüle

@@ -0,0 +1,88 @@
#!/usr/bin/python3
# NationStates Login Script
import requests
import time
import xml.etree.cElementTree as ET
import json

# Config
with open('config.json', 'r') as f:
config = json.load(f)
my_nation = config['main-nation']
my_password = config['password']
# End Config


def main():
"""Logs into into all nations in the login.txt file, with the format nation;password, one per line."""
user_agent = my_nation
main_password = my_password
ejected_nations = get_ejected_nations()
canonicalized_ejected = [fix(e_nation) for e_nation in ejected_nations]
# open the file with nation and passwords
with open('login.txt', 'r') as f:
for line in f:
# Check if the line is a comment
if line[0] != "#":
# Assuming the password is the usual password
if line.find(';') == -1:
nation = line.strip()
password = main_password
# Otherwise, a unique password is specified
else:
# get nation and password
nation, password = line.strip().split(';')
# make request
login(nation, password, user_agent)
if fix(nation) in canonicalized_ejected:
write_out(nation, 0)
else:
continue


def fix(s):
"""Formats a string the NS way, lowercase underscore."""
return s.lower().replace(' ', '_')


def get_ejected_nations():
""""Return all ejected nations."""
time.sleep(0.7)
r = requests.get("https://www.nationstates.net/cgi-bin/api.cgi?region=the_rejected_realms&q=nations",
headers={"User-Agent": f"<Nation: {my_nation}> Login Script"})
root = ET.fromstring(r.text)
return root[0].text.split(':')


def write_out(nation, status):
"""Write login failures and ejected nations to out."""
# Ejected Nations
if status == 0:
with open("output/ejected.txt", "a") as f:
f.write('{}\n'.format(nation))
# Failed to login
elif status == 1:
with open("output/failed_login.txt", "a") as f:
f.write('{}\n'.format(nation))


def login(nation, password, agent):
"""Given the nation and password, query to the NS API with a ping request."""
# take a break first
rate = 0.7
time.sleep(rate)
# set the user agent to abide by rules, and password to ping properly
r_headers = {'User-Agent': 'login2.py in use by <Nation: {}>'.format(agent),
'X-Password': password}
r = requests.get('https://www.nationstates.net/cgi-bin/api.cgi?nation={}&q=ping'.format(fix(nation)),
headers=r_headers)
try:
r.raise_for_status()
print("Logged into {}.".format(nation))
except requests.exceptions.HTTPError:
print("Error logging into {}.".format(nation))
write_out(nation, 1)


if __name__ == '__main__':
main()

Yükleniyor…
İptal
Kaydet