Abrufen von Statistiken für alle Clients aus der Yandex.Direct-API nach Tagen mithilfe von Python

In meiner Arbeit verwende ich oft kurze Statistiken nach Tagen, um Verkehrsabweichungen zu verfolgen.

Weitere Informationen zum Schreiben von Anfragen finden Sie im Artikel „Abrufen von Yandex.Direct Direct Advertising-Kampagnen mithilfe einer API in einem DataFrame (Python)“ .

In diesem Artikel werde ich mehr darüber sprechen, wie Daten und Abfragen so strukturiert werden, dass sie normal verwendet werden können.

Wir sollten die Serveranforderung als Funktion registrieren.

Persönlich habe ich 2 Dateien erstellt: eine Funktion mit einer Anfrage und eine Datei mit Daten, die an die Funktion übertragen werden.

In der ersten Datei schreiben wir eine Funktion


Ich fordere für alle Projekte die gleichen Felder an, daher muss ich nur die Daten, die Anmeldung und das Token der Anfrage übergeben.

Das Übergeben von Daten an eine Funktion sieht für mich folgendermaßen aus:

def rep(token,login,date_from,date_to): 

Wir schreiben eine Anfrage an den Yandex.Direct API-Server


Diese Abfrage fordert Daten für die folgenden Parameter an:

  • Datum
  • Impressionen
  • Klicks
  • Ctr
  • Kosten
  • Durchschn
  • AvgImpressionPosition
  • AvgClickPosition
  • AvgTrafficVolume
  • Türsteher
  • AvgPageviews

Die endgültige Anforderungsdatei


Code
 import requests from requests.exceptions import ConnectionError from time import sleep import json #        UTF-8   Python 3,    Python 2 import sys def rep(token,login,date_from,date_to): if sys.version_info < (3,): def u(x): try: return x.encode("utf8") except UnicodeDecodeError: return x else: def u(x): if type(x) == type(b''): return x.decode('utf8') else: return x # ---   --- #   Reports   JSON- () ReportsURL = 'https://api.direct.yandex.com/json/v5/reports' # OAuth- ,       token = token #     #  ,        clientLogin = login # ---   --- #  HTTP-  headers = { # OAuth-.   Bearer  "Authorization": "Bearer " + token, #     "Client-Login": clientLogin, #    "Accept-Language": "ru", #    "processingMode": "auto" #      # "returnMoneyInMicros": "false", #            # "skipReportHeader": "true", #         # "skipColumnHeader": "true", #          # "skipReportSummary": "true" } #    body = { "params": { "SelectionCriteria": { "DateFrom": date_from, "DateTo": date_to }, "FieldNames": [ "Date", "Impressions", "Clicks", "Ctr", "Cost", "AvgCpc", "AvgImpressionPosition", "AvgClickPosition", "AvgTrafficVolume", "BounceRate", "AvgPageviews", ], "ReportName": u("Report4"), "ReportType": "ACCOUNT_PERFORMANCE_REPORT", "DateRangeType": "CUSTOM_DATE", "Format": "TSV", "IncludeVAT": "NO", "IncludeDiscount": "NO" } } #     JSON body = json.dumps(body, indent=4) # ---      --- #   HTTP- 200,     #   HTTP- 201  202,    while True: try: req = requests.post(ReportsURL, body, headers=headers) req.encoding = 'utf-8' #      UTF-8 if req.status_code == 400: print("         ") print("RequestId: {}".format(req.headers.get("RequestId", False))) print("JSON- : {}".format(u(body))) print("JSON-  : \n{}".format(u(req.json()))) break elif req.status_code == 200: format(u(req.text)) break elif req.status_code == 201: print("       ") retryIn = int(req.headers.get("retryIn", 60)) print("    {} ".format(retryIn)) print("RequestId: {}".format(req.headers.get("RequestId", False))) sleep(retryIn) elif req.status_code == 202: print("    ") retryIn = int(req.headers.get("retryIn", 60)) print("    {} ".format(retryIn)) print("RequestId: {}".format(req.headers.get("RequestId", False))) sleep(retryIn) elif req.status_code == 500: print("    . ,    ") print("RequestId: {}".format(req.headers.get("RequestId", False))) print("JSON-  : \n{}".format(u(req.json()))) break elif req.status_code == 502: print("     .") print( ",     -      .") print("JSON- : {}".format(body)) print("RequestId: {}".format(req.headers.get("RequestId", False))) print("JSON-  : \n{}".format(u(req.json()))) break else: print("  ") print("RequestId: {}".format(req.headers.get("RequestId", False))) print("JSON- : {}".format(body)) print("JSON-  : \n{}".format(u(req.json()))) break #  ,       API  except ConnectionError: #         print("     API") #     break #   -   except: #         print("  ") #     break json_string = json.dumps(body) return req.text 


2 Datei


Wir nehmen die Daten, Anmeldungen und Token separat als Variablen heraus.


Ungefähr so:

 # mytoken='blablablablaBLABLAsdfgsrgkdfgnf' # project = 'elama-99999999' # DateFrom="2019-04-08" DateTo="2019-04-16" 

Dies geschieht, um Informationen zu allen Kunden und die Daten von Berichten einfach zu ändern.

Code zum Anfordern von Projektstatistiken


 print( '\n=== ===') data=rep(mytoken,project,DateFrom,DateTo) file=open("cashe.csv","w") file.write(data) file.close() f=DataFrame.from_csv("cashe.csv",header=1,sep=' ',index_col=0,parse_dates=True) f['Cost']=f['Cost']*1.2 f['Cost']=f['Cost']/1000000 f['AvgCpc']=f['AvgCpc']*1.2 f['AvgCpc']=f['AvgCpc']/1000000 print(f) 

Weitere Details:

  1. Der Name des Projekts ("=" verwenden wir zur besseren Auswahl, um nicht in den Informationen verloren zu gehen)
  2. Daten - Schreiben Sie in diese Zeile die Variablen, die oben bereits angegeben sind. (Diese Zeile führt die erste Datei aus.)
  3. Wir schreiben die Serverantwort in eine Datei
  4. Öffnen Sie die Datei als DataFrame
  5. Zu den Geldwerten der Mehrwertsteuer hinzufügen.
  6. Wir übersetzen die Geldwerte in gewöhnliche Rubel (standardmäßig verwendet die API keine Rubel, sondern Rubel * 1.000.000.
  7. Geben Sie unseren DataFrame aus



Die zweite Datei lautet wie folgt:


Code
 # import pandas as pd import numpy as np from pandas import Series,DataFrame from     import rep #   pd.set_option('display.max_columns',None) pd.set_option('display.expand_frame_repr',False) pd.set_option('max_colwidth',-1) # mytoken='blablablablaBLABLAsdfgsrgkdfgnf' # project = 'elama-99999999' # DateFrom="2019-04-08" DateTo="2019-04-16" print( '\n=== ===') data=rep(mytoken,project,DateFrom,DateTo) file=open("cashe.csv","w") file.write(data) file.close() f=DataFrame.from_csv("cashe.csv",header=1,sep=' ',index_col=0,parse_dates=True) f['Cost']=f['Cost']*1.2 f['Cost']=f['Cost']/1000000 f['AvgCpc']=f['AvgCpc']*1.2 f['AvgCpc']=f['AvgCpc']/1000000 print(f) 


Wir schreiben alle Projekte in die zweite Datei, danach sollten wir Statistiken für alle Projekte anzeigen.

Danach müssen wir nur noch die Zeitdauer in den Feldern DateFrom und DateTo ändern.

Source: https://habr.com/ru/post/de449392/


All Articles