| 1 | #!./fflogs/bin/python |
| 2 | from gql import Client, gql |
| 3 | from gql.transport.aiohttp import AIOHTTPTransport |
| 4 | import requests |
| 5 | from secrets import * |
| 6 | |
| 7 | encounter_aliases = [ |
| 8 | 'cloudRanks', |
| 9 | 'dogRanks', |
| 10 | 'thanRanks', |
| 11 | 'boobaRanks', |
| 12 | 'gaiaRanks', |
| 13 | ] |
| 14 | |
| 15 | res = requests.post( |
| 16 | "https://www.fflogs.com/oauth/token", |
| 17 | data={"grant_type": "client_credentials"}, |
| 18 | auth=(client_id, client_secret) |
| 19 | ) |
| 20 | token = res.json()['access_token'] |
| 21 | headers = {'Authorization': f"Bearer {token}"} |
| 22 | |
| 23 | transport = AIOHTTPTransport(url="https://www.fflogs.com/api/v2/client", headers=headers) |
| 24 | |
| 25 | client = Client(transport=transport, fetch_schema_from_transport=True) |
| 26 | |
| 27 | query = gql( |
| 28 | ''' |
| 29 | query ($name: String!, $serverSlug: String!, $serverRegion: String!) { |
| 30 | characterData { |
| 31 | character ( |
| 32 | name: $name |
| 33 | serverSlug: $serverSlug |
| 34 | serverRegion: $serverRegion |
| 35 | ) |
| 36 | { |
| 37 | canonicalID |
| 38 | name |
| 39 | cloudRanks: encounterRankings (encounterID: 73) |
| 40 | dogRanks: encounterRankings (encounterID: 74) |
| 41 | thanRanks: encounterRankings (encounterID: 75) |
| 42 | boobaRanks: encounterRankings (encounterID: 76) |
| 43 | gaiaRanks: encounterRankings (encounterID: 77) |
| 44 | } |
| 45 | } |
| 46 | } |
| 47 | ''' |
| 48 | ) |
| 49 | params = { |
| 50 | "name": f"{name}", |
| 51 | "serverSlug": f"{serverSlug}", |
| 52 | "serverRegion": "na", |
| 53 | } |
| 54 | result = client.execute(query, variable_values=params) |
| 55 | encounter_ranks = [result['characterData']['character'][encounter_alias] for encounter_alias in encounter_aliases] |
| 56 | reports = {rank['report']['code'] for encounter in encounter_ranks for rank in encounter['ranks']} |
| 57 | query = gql( |
| 58 | ''' |
| 59 | query ($code: String!) { |
| 60 | reportData { |
| 61 | report ( |
| 62 | code: $code |
| 63 | ) |
| 64 | { |
| 65 | code |
| 66 | rankings |
| 67 | } |
| 68 | } |
| 69 | } |
| 70 | ''' |
| 71 | ) |
| 72 | for code in reports: |
| 73 | result = client.execute(query, variable_values={"code": code}) |
| 74 | for kill_rank in result['reportData']['report']['rankings']['data']: |
| 75 | tanks = kill_rank['roles']['tanks']['characters'] |
| 76 | healers = kill_rank['roles']['healers']['characters'] |
| 77 | dps = kill_rank['roles']['dps']['characters'] |
| 78 | pull = kill_rank['fightID'] |
| 79 | print(code,pull,','.join([str(char['id']) for char in tanks] + [str(char['id']) for char in healers] + [str(char['id']) for char in dps]), sep="|") |