Я пытаюсь загрузить отчет с помощью моего консольного приложения. Есть несколько вещей, которые я с трудом понимаю с API facebook. Facebook API Reporting - C#, RestSharp
Что такое hardcoded 1000002 about. Если вы нажмете этот URL либо в браузере графа API Explorer, вы получаете одну запись, которая содержит:
{
"name": "Angus Shieh",
"id": "1000002"
}
Мне нужно, чтобы загрузить файл CSV и в соответствии с: https://developers.facebook.com/docs/marketing-api/insights/v2.5 Мне нужно, чтобы загрузить его с помощью этого URL:
https://www.facebook.com/ads/ads_insights/export_report?report_run_id=<REPORT_ID>&format=<REPORT_FORMAT>&access_token=<ACCESS_TOKEN>
Это работает вроде в браузере, я могу загрузить отчет, но он содержит только два поля, а не полный доклад на всех. Тем не менее, мне сложно загружать этот файл с помощью моего кода. Я попытался создать HttpClient и перейти к этому URL-адресу, который не сработал.
Что я хотел бы сделать, это загрузить отчет для каждой кампании для каждой учетной записи программным путем. Затем я буду использовать эти данные на более позднем этапе для заполнения базы данных отчетов.
Обновление: Я выяснил, как загрузить отчет с использованием API.
Шаг 1 - Вызов конечной точки, которая создает асинхронное задание.
var client = new RestClient("https://graph.facebook.com"); // new client
var request = new RestRequest(Method.POST);
request.Resource = "{version}/{campaign_id}/insights"; // campaind id is the <ad object>
request.AddParameter("version", "v2.5", ParameterType.UrlSegment);
request.AddParameter("campaign_id", "6039201600172", ParameterType.UrlSegment); // needs a campaign id
// the form post fields
request.AddParameter("level", "ad");
request.AddParameter("fields", "['campaign_name','ad_name','ad_id','reach','frequency','impressions','cpm','cpp','spend','social_clicks','unique_clicks','ctr','unique_ctr','account_name','actions','total_actions','website_clicks']");
request.AddParameter("time_range", "{'since':'2016-04-04','until':'2016-04-04'}");
request.AddParameter("time_increment", "1");
request.AddParameter("access_token", accessToken);
// EXAMPLE URL WHEN DONE
// https://graph.facebook.com/v2.5/6039201600172/insights
IRestResponse<Report> response = client.Execute<Report>(request);
var report_id = response.Data.report_run_id; // report run id
Шаг 2 - проверка состояния, что вновь созданные задания, пока это не будет сделано.
var reportPercent = "";
while (reportPercent != "100")
{
Thread.Sleep(2000); // wait 2 seconds
// Next Request
var checkReportStatusRequest = new RestRequest(Method.GET);
checkReportStatusRequest.Resource = "{version}/{report_id}"; // campaind id is the <ad object>
checkReportStatusRequest.AddParameter("version", "v2.5", ParameterType.UrlSegment);
checkReportStatusRequest.AddParameter("report_id", report_id, ParameterType.UrlSegment);
checkReportStatusRequest.AddParameter("access_token", accessToken);
//request.AddParameter("access_token", accessToken, ParameterType.UrlSegment);
// https://graph.facebook.com/v2.5/6042737300572/?access_token=EAAIe5FQupPkBAADZBTgqWDBTDHkoJ9k0HSQSu1PLpbBdPgKFhyvRtIMUXF0po06r8hRw1nbJOszznSNEh8OJW4XBeNxClZApeWoJ31QQDSn7KZC33PPY8Wazknu0ZC3mUnKGP0ZCa4OiuawLPsu8FhrLuGaNj4M4ZD
IRestResponse<ReportStatus> responseStatus = client.Execute<ReportStatus>(checkReportStatusRequest);
//var responseStatus = client.Execute(checkReportStatusRequest);
reportPercent = responseStatus.Data.async_percent_completion; // report run id
//var reportPercent = responseStatus.Content; // report run id
}
Шаг 3 - загрузить отчет.
string url = "https://www.facebook.com/ads/ads_insights/export_report?report_run_id=" + report_id + "&format=csv&access_token=" + accessToken;
using (WebClient wc = new WebClient())
{
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
wc.Headers["User-Agent"] = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
wc.DownloadFile(url, @"C:\reports\page1.csv"); // download the file
}
Console.WriteLine("File Downloaded");
//pause
Console.ReadKey();
Большое спасибо, что вы только что спасли мою жизнь :) – anekix