2016-04-11 15 views
1

Ich versuche, einen Bericht mit meiner Konsolenanwendung herunterzuladen. Es gibt ein paar Dinge, die ich mit der Facebook API schwer verstehen kann. enter image description hereFacebook API-Berichterstellung - C#, RestSharp

Was ist die hartcodierte 1000002 über. Wenn Sie diese URL treffen entweder im Browser des Graph API Explorer erhalten Sie einen einzelnen Eintrag, der enthält:

{ 
    "name": "Angus Shieh", 
    "id": "1000002" 
} 

Ich brauche eine CSV-Datei herunterladen und nach: https://developers.facebook.com/docs/marketing-api/insights/v2.5 ich herunterladen, um es auf diese Verwendung url:

https://www.facebook.com/ads/ads_insights/export_report?report_run_id=<REPORT_ID>&format=<REPORT_FORMAT>&access_token=<ACCESS_TOKEN> 

Diese Art von im Browser funktioniert, kann ich einen Bericht herunterladen, aber es enthält nur zwei Felder, nicht einen vollständigen Bericht überhaupt. Ich habe jedoch Schwierigkeiten beim Herunterladen dieser Datei mit meinem Code. Ich habe versucht, einen HttpClient zu erstellen und zu dieser URL zu navigieren, was nicht funktioniert hat.

Ich möchte einen Bericht für jede Kampagne für jedes Konto programmgesteuert herunterladen. Ich werde dann diese Daten in einem späteren Schritt verwenden, um eine Berichtsdatenbank zu füllen.

Update: Ich habe herausgefunden, wie man einen Bericht über die API herunterladen.

Schritt 1 - Rufen Sie den Endpunkt auf, der einen asynchronen Auftrag erstellt.

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 

Step 2 - Überprüfen Sie, dass neu-Status angelegter Auftrag, bis es fertig ist.

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 
      } 

Schritt 3 - Ihr Bericht herunterladen.

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(); 
+1

Vielen Dank, dass Sie gerade mein Leben gerettet haben :) – anekix

Antwort

1

Update: Ich habe herausgefunden, wie ein Bericht herunterladen, um die API.

Schritt 1 - Rufen Sie den Endpunkt auf, der einen asynchronen Auftrag erstellt.

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 

Schritt 2 - Überprüfen Sie, dass neu-Status angelegter Auftrag, bis es fertig ist.

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 
      } 

Schritt 3 - Ihr Bericht herunterladen.

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