DataFrame (Python) рдореЗрдВ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Yandex рдбрд╛рдпрд░реЗрдХреНрдЯ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдЕрднрд┐рдпрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

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

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдкреАрдЖрдИ рдФрд░ рдЕрдЬрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдЦрд╛рддреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ред

рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░, рд╣рдо Yandex.Direct API рдХреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╡рд┐рдЬреНрдЮрд╛рдкрди рдЕрднрд┐рдпрд╛рдиреЛрдВ рдкрд░ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:

  1. Yandex Direct API рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  2. рдПрдХ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦреЗрдВ
  3. DataFrame рдореЗрдВ рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ


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

рд╕рднреА рдЖрдпрд╛рдд рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ:

import requests from requests.exceptions import ConnectionError from time import sleep import json import pandas as pd import numpy as np from pandas import Series,DataFrame 

рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рдЗрд╕ рд╕рдордп рдореИрдВ рдПрдкреАрдЖрдИ рдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред

( рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ )

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


рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ

рдЕрдиреБрд░реЛрдз рдмрджрд▓реЗрдВред

  • рдЕрдкрдирд╛ рдЯреЛрдХрди рд▓рд┐рдЦрдХрд░ рд▓реЙрдЧрд┐рди рдХрд░реЗрдВ

рдЯреЛрдХрдиред

token = 'blaBlaBLAblaBLABLABLAblabla'

рд▓реЙрдЧ рдЗрдиред

clientLogin = 'e-66666666'

  • рд╣рдо рдЕрдкрдиреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рд╕реЗ

 body = { "params": { "SelectionCriteria": { "DateFrom": "_", "DateTo": "_" }, "FieldNames": [ "Date", "CampaignName", "LocationOfPresenceName", "Impressions", "Clicks", "Cost" ], "ReportName": u("_"), "ReportType": "CAMPAIGN_PERFORMANCE_REPORT", "DateRangeType": "CUSTOM_DATE", "Format": "TSV", "IncludeVAT": "NO", "IncludeDiscount": "NO" 

рдХрд░ рд▓реЛ

  body = { "params": { "SelectionCriteria": { "Filter": [ { "Field": "Clicks", "Operator": "GREATER_THAN", "Values": [ "0" ] }, ] }, "FieldNames": [ "CampaignName", "Impressions", "Clicks", "Ctr", "Cost", "AvgCpc", "BounceRate", "AvgPageviews", "ConversionRate", "CostPerConversion", "Conversions" ], "ReportName": u("Report4"), "ReportType": ┬л ", "DateRangeType": "LAST_5_DAYS", "Format": "TSV", "IncludeVAT": "NO", "IncludeDiscount": "NO" } } 

SelectionCriteria рдореЗрдВ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, 2 рддрд┐рдерд┐рдпрд╛рдВ рд╡рд╣рд╛рдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рд╕рдордп рдЕрд╡рдзрд┐ рдХреЛ "рдЕрдВрддрд┐рдо 5 рджрд┐рдиреЛрдВ" рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗред

рд╣рдо рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ ред рдЦрд╛рд▓реА рдорд╛рди рди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдбрд╛рдпрд░реЗрдХреНрдЯ рд▓рд╛рдкрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рджреЛ minuses рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдкреВрд░реЗ рдХреЙрд▓рдо рдХрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдк рдмрд┐рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

FieldNamesред рд╣рдо рдпрд╣рд╛рдВ рд╡рд╣ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬреЛ рдореИрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЖрдкрдХреА рд╕реВрдЪреА рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред

ReportTypeред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрднрд┐рдпрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЫрд╡рд┐

5. рдбреЗрдЯрд╛ рдХреЛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВред

(рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ DataFrame рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХрд╛ рд╣реИред)

рдореИрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рд╕реАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред
рд╣рдо рдХреНрд╡реЗрд░реА рдореЗрдВ рдЙрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдЬреЛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ - рдпрд╣ "req.text" рд╣реИред

рд╣рдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб 200 рдореЗрдВ рд╕рднреА рдирд┐рд╖реНрдХрд░реНрд╖ рдмрджрд▓реЗрдВред

  print("  ") print("RequestId: {}".format(req.headers.get("RequestId", False))) print(" : \n{}┬╗.format(u(req.text))) 

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  format(u(req.text)) 

рдЕрдм DataFrame рдореЗрдВ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВред

  file = open("cashe.csv", "w") file.write(req.text) file.close() f = DataFrame.from_csv("cashe.csv",header=1, sep=' ', index_col=0,) 

рдХрджрдо рд╕реЗ рдХрджрдо:

  • рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП cashe.csv рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ (рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдПрдВ)
  • рд╣рдо рдЗрд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
  • рдлрд╝рд╛рдЗрд▓ рдмрдВрдж рдХрд░реЗрдВ
  • рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЛрд▓реЗрдВ (рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрдВрдХреНрддрд┐ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рд╣реИрдВ, рдбреЗрдЯрд╛ рдХреЗ рдмреАрдЪ рд╡рд┐рднрдХреНрдд рдХреНрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрддрдВрдн рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╣реИ)

рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдХрд▓рд╛:

рдЫрд╡рд┐

рд╣рдо рдХреЙрд▓рдо рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ:

  pd.set_option('display.max_columns', None) pd.set_option('display.expand_frame_repr', False) pd.set_option('max_colwidth', -1) 

рдЕрдм рд╕рдм рдХреБрдЫ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЫрд╡рд┐

рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореМрджреНрд░рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡реИрд╕рд╛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рдЬреИрд╕рд╛ рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпреЗ Yandex.Direct API рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рд╣рдореЗрдВ рдмрд╕ рдореМрджреНрд░рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ 1,000,000 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 f['Cost'] = f['Cost']/1000000 f['AvgCpc'] = f['AvgCpc']/1000000 f['CostPerConversion'] = f['CostPerConversion']/1000000 

рдореИрдВ рдХреНрд▓рд┐рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рддреБрд░рдВрдд рдЫрдБрдЯрд╛рдИ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рднреА рджреЗрддрд╛ рд╣реВрдБ

 f=f.sort_values(by=['Clicks'], ascending=False) 

рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛

рдЫрд╡рд┐

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

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЕрдВрддрд┐рдо рдХреЛрдб:
 import requests from requests.exceptions import ConnectionError from time import sleep import json import pandas as pd import numpy as np from pandas import Series,DataFrame pd.set_option('display.max_columns', None) pd.set_option('display.expand_frame_repr', False) pd.set_option('max_colwidth', -1) #        UTF-8   Python 3,    Python 2 import sys 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 = ' ' #     #  ,        clientLogin = ' ' # ---   --- #  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": { "Filter": [ { "Field": "Clicks", "Operator": "GREATER_THAN", "Values": [ "0" ] }, ] }, "FieldNames": [ "CampaignName", "Impressions", "Clicks", "Ctr", "Cost", "AvgCpc", "BounceRate", "AvgPageviews", "ConversionRate", "CostPerConversion", "Conversions" ], "ReportName": u("Report4"), "ReportType": "CAMPAIGN_PERFORMANCE_REPORT", "DateRangeType": "LAST_5_DAYS", "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 file = open("cashe.csv", "w") file.write(req.text) file.close() f = DataFrame.from_csv("cashe.csv",header=1, sep=' ', index_col=0,) f['Cost'] = f['Cost']/1000000 f['AvgCpc'] = f['AvgCpc']/1000000 f['CostPerConversion'] = f['CostPerConversion']/1000000 f=f.sort_values(by=['Clicks'], ascending=False) print(f) 

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


All Articles