рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Yandex.Direct API рд╕реЗ рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдореИрдВ рдЕрдХреНрд╕рд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рд╡рд┐рдЪрд▓рди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдиреЛрдВ рджрд┐рди рдХрдо рдЖрдБрдХрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБред

рдЙрдиреНрд╣реЛрдВрдиреЗ рд▓реЗрдЦ рдореЗрдВ "рдпрдВрдбреЗрдХреНрд╕.рдбрд╛рдпрд░реЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдЕрднрд┐рдпрд╛рдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо (рдкрд╛рдпрдерди) рдореЗрдВ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЗрдЦрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рд┐рдЦрд╛ред "

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ 2 рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдИрдВ: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкрд╣рд▓реА рдлрд╛рдЗрд▓ рдореЗрдВ рд╣рдо рдПрдХ рдлрдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ


рдореИрдВ рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдлрд╝реАрд▓реНрдб рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХреЗрд╡рд▓ рджрд┐рдирд╛рдВрдХ, рд▓реЙрдЧрд┐рди рдФрд░ рдЯреЛрдХрди рдЕрдиреБрд░реЛрдз рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЗрд╕ рддрд░рд╣ рд╣реИ:

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

рд╣рдо Yandex.Direct API рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ


рдпрд╣ рдХреНрд╡реЗрд░реА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреА рд╣реИ:

  • рддрд┐рдерд┐
  • рдЫрд╛рдкреЗ
  • рдХреНрд▓рд┐рдХреНрд╕
  • рд╕реАрдЯреАрдЖрд░
  • рд▓рд╛рдЧрдд
  • рдФрд╕рдд CPC
  • AvgImpressionPosition
  • AvgClickPosition
  • AvgTrafficVolume
  • BounceRate
  • AvgPageviews

рдЕрдВрддрд┐рдо рдЕрдиреБрд░реЛрдз рдлрд╝рд╛рдЗрд▓


рдХреЛрдб
 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 рдлрд╝рд╛рдЗрд▓


рд╣рдо рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдирд╛рдВрдХ, рд▓реЙрдЧрд┐рди рдФрд░ рдЯреЛрдХрди рдЕрд▓рдЧ рд╕реЗ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред


рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

 # 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) 

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА:

  1. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо ("=" рд╣рдо рдмреЗрд╣рддрд░ рдЪрдпрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рдЦреЛ рди рдЬрд╛рдП)
  2. рдбреЗрдЯрд╛ - рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рд▓рд┐рдЦреЗрдВ рдЬреЛ рдЪрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рд╣реИрдВред (рдпрд╣ рдкрдВрдХреНрддрд┐ рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧреА)
  3. рд╣рдо рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
  4. рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЛрд▓реЗрдВ
  5. рд╡реИрдЯ рдХреЗ рдореМрджреНрд░рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
  6. рд╣рдо рдореМрджреНрд░рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рд╛рдзрд╛рд░рдг рд░реВрдмрд▓ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ (рдПрдХ рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдкреАрдЖрдИ рд░реВрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди * 1,000,000 1,000,000ред
  7. рд╣рдорд╛рд░реЗ DataFrame рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВ



рджреВрд╕рд░реА рдлрд╛рдЗрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


рдХреЛрдб
 # 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) 


рд╣рдо рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдПред

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдХреЗрд╡рд▓ DateFrom рдФрд░ DateTo рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдордп рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред

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


All Articles