2014-10-29 58 views
6

有沒有人有從.net/C#調用Marketo Rest API的示例。在.net/c中調用Marketo Rest Api的示例代碼#

我對oauth驗證片特別感興趣。 http://developers.marketo.com/documentation/rest/authentication/

我打算把這個端點 http://developers.marketo.com/documentation/rest/get-multiple-leads-by-list-id/

我找不到任何例子在那裏的interweb。

+0

確實沒有關於使用.net/C#調用Market REST API的示例或文檔。不知道爲什麼有人不喜歡這個問題。 – Cameron 2014-10-30 02:51:22

+0

爲什麼這是低調?這是一個有效的問題。 – 2014-10-30 16:46:17

回答

6

我能夠編寫一個調用Marketo Rest API並執行OAuth的解決方案。下面是一個操作方法 下面的代碼顯示了基礎知識,但需要清理,記錄和錯誤處理才能使產品更有價值。

您需要獲取Marketo實例的Rest api URL。爲此,請登錄到marketo,然後導航到Admin \ Integration \ Web Services,並使用Rest API部分中的URL。

您需要從marketo獲取用戶ID和密碼 - 導航到Admin \ Integration \ Launch Pont。查看您的休息服務的詳細信息以獲得身份證和祕密。如果您沒有服務,請按照這些說明http://developers.marketo.com/documentation/rest/custom-service/

最後,您需要列出您想要獲得的潛在客戶名單的列表ID。您可以通過導航到您的列表並將id的數字部分從url中複製出來。例如:https://XXXXX.marketo.com/#ST1194B2 - >列表ID = 1194

 private void GetListLeads() 
    { 
     string token = GetToken().Result; 

     string listID = "XXXX"; // Get from Marketo UI 
     LeadListResponse leadListResponse = GetListItems(token, listID).Result; 
     //TODO: do something with your list of leads 

    } 
    private async Task<string> GetToken() 
    { 
     string clientID = "XXXXXX"; // Get from Marketo UI 
     string clientSecret = "XXXXXX"; // Get from Marketo UI 

     string url = String.Format("https://XXXXXX.mktorest.com/identity/oauth/token?grant_type=client_credentials&client_id={0}&client_secret={1}",clientID, clientSecret); // Get from Marketo UI 
     var fullUri = new Uri(url, UriKind.Absolute); 

     TokenResponse tokenResponse = new TokenResponse(); 
     using (var client = new HttpClient()) 
     { 
      HttpResponseMessage response = await client.GetAsync(fullUri); 

      if (response.IsSuccessStatusCode) 
      { 
       tokenResponse = await response.Content.ReadAsAsync<TokenResponse>(); 
      } 
      else 
      { 
       if (response.StatusCode == HttpStatusCode.Forbidden) 
        throw new AuthenticationException("Invalid username/password combination."); 
       else 
        throw new ApplicationException("Not able to get token"); 
      } 
     } 

     return tokenResponse.access_token; 
    } 

    private async Task<LeadListResponse> GetListItems(string token, string listID) 
    { 

     string url = String.Format("https://XXXXXX.mktorest.com/rest/v1/list/{0}/leads.json?access_token={1}", listID, token);// Get from Marketo UI 
     var fullUri = new Uri(url, UriKind.Absolute); 

     LeadListResponse leadListResponse = new LeadListResponse(); 
     using (var client = new HttpClient()) 
     { 
      HttpResponseMessage response = await client.GetAsync(fullUri); 

      if (response.IsSuccessStatusCode) 
      { 
       leadListResponse = await response.Content.ReadAsAsync<LeadListResponse>(); 
      } 
      else 
      { 
       if (response.StatusCode == HttpStatusCode.Forbidden) 
        throw new AuthenticationException("Invalid username/password combination."); 
       else 
        throw new ApplicationException("Not able to get token"); 
      } 
     } 

     return leadListResponse; 
    } 


    private class TokenResponse 
    { 
     public string access_token { get; set; } 
     public int expires_in { get; set; } 
    } 

    private class LeadListResponse 
    { 
     public string requestId { get; set; } 
     public bool success { get; set; } 
     public string nextPageToken { get; set; } 
     public Lead[] result { get; set; } 
    } 

    private class Lead 
    { 
     public int id { get; set; } 
     public DateTime updatedAt { get; set; } 
     public string lastName { get; set; } 
     public string email { get; set; } 
     public DateTime datecreatedAt { get; set; } 
     public string firstName { get; set; } 
    } 
1

老問題,只是希望能夠幫助未來的傢伙誰從谷歌搜索:-)

本頁面可能不存在的時候在這裏結束這篇文章,但現在有一個很好的頁面與幾種語言的例子。該網頁是在 http://developers.marketo.com/documentation/rest/get-multiple-leads-by-list-id

萬一鏈接耗盡,這裏是代碼的例子,它們提供了C#

using Newtonsoft.Json; 
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Net; 
using System.Text; 
using System.Threading.Tasks; 

namespace Samples 
{ 
    class LeadsByList 
    { 
     private String host = "CHANGE ME"; //host of your marketo instance, https://AAA-BBB-CCC.mktorest.com 
     private String clientId = "CHANGE ME"; //clientId from admin > Launchpoint 
     private String clientSecret = "CHANGE ME"; //clientSecret from admin > Launchpoint 
     public int listId; 
     public int batchSize;//max 300, default 300 
     public String[] fields;//array of field names to retrieve 
     public String nextPageToken;//paging token 
     /* 
     public static void Main(String[] args) 
     { 
      MultipleLeads leads = new MultipleLeads(); 
      leads.listId = 1001 
      String result = leads.getData(); 
      Console.WriteLine(result); 
      while (true) 
      { 

      } 
     } 
     */ 
     public String getData() 
     { 
      StringBuilder url = new StringBuilder(host + "/rest/v1/list/" + listId + "/leads.json?access_token=" + getToken()); 
      if (fields != null) 
      { 
       url.Append("&fields=" + csvString(fields)); 
      } 
      if (batchSize > 0 && batchSize < 300) 
      { 
       url.Append("&batchSize=" + batchSize); 
      } 
      if (nextPageToken != null) 
      { 
       url.Append("&nextPageToken=" + nextPageToken); 
      } 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url.ToString()); 
      request.ContentType = "application/json"; 
      request.Accept = "application/json"; 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      Stream resStream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(resStream); 
      return reader.ReadToEnd(); 
     } 

     private String getToken() 
     { 
      String url = host + "/identity/oauth/token?grant_type=client_credentials&client_id=" + clientId + "&client_secret=" + clientSecret; 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
      request.ContentType = "application/json"; 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      Stream resStream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(resStream); 
      String json = reader.ReadToEnd(); 
      //Dictionary<String, Object> dict = JavaScriptSerializer.DeserializeObject(reader.ReadToEnd); 
      Dictionary<String, String> dict = JsonConvert.DeserializeObject<Dictionary<String, String>>(json); 
      return dict["access_token"]; 
     } 
     private String csvString(String[] args) 
     { 
      StringBuilder sb = new StringBuilder(); 
      int i = 1; 
      foreach (String s in args) 
      { 
       if (i < args.Length) 
       { 
        sb.Append(s + ","); 
       } 
       else 
       { 
        sb.Append(s); 
       } 
       i++; 
      } 
      return sb.ToString(); 

     } 
    } 
} 

在這個響應的時間 - 這個頁面擁有所有的API調用記錄在案 http://developers.marketo.com/documentation/rest/