Facebook API 报告 - C#、RestSharp

Facebook API Reporting - C#, RestSharp

我正在尝试使用我的控制台应用程序下载报告。有几件事我很难理解 facebook API。

硬编码的 1000002 是关于什么的。如果您在 Graph API Explorer 的浏览器中点击此 URL,您将获得一个条目,其中包含:

{
  "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();

更新: 我已经弄清楚如何使用 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();