Получить все контакты из списка HubSpot с помощью API - PullRequest
0 голосов
/ 03 июля 2019

Я использую API контактов, но он возвращает максимум 250 контактов.Я использовал параметр 'vidOffset' для следующей страницы, но не повезло.

Примечание: я хочу экспортировать все контакты из списка Hubspot в мою локальную базу данных, используя API

Вот мой код с php curl:

function callAPI($method, $url, $data){
   $curl = curl_init();
   $url = $url.'&property=firstname&property=email&count=5&vidOffset=2';
    switch ($method){
      case "POST":
         curl_setopt($curl, CURLOPT_POST, 1);
         if ($data)
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
         break;
      case "PUT":
         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
         if ($data)
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);                              
         break;
      default:
         if ($data)
            $url = sprintf("%s?%s", $url, http_build_query($data));
   }
   // OPTIONS:
   curl_setopt($curl, CURLOPT_URL, $url);
   curl_setopt($curl, CURLOPT_HTTPHEADER, array(
      'Content-Type: application/json',
   ));
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

   // EXECUTE:
   $result = curl_exec($curl);
   if(!$result){die("Connection Failure");}
   curl_close($curl);
   return $result;
}

// call the function
callAPI('GET', 'https://api.hubapi.com/contacts/v1/lists/11/contacts/all?hapikey=[API key]', false);

Что-то не так я делаю?или если есть лучший способ получить все контакты, используя php / wordpress, то, пожалуйста, поделитесь своим опытом.

1 Ответ

1 голос
/ 03 июля 2019

Есть несколько вещей, на которые нужно обратить внимание при вызове этого API.

  1. Есть ли "истинное" значение в поле "has-more".Если это так, есть еще контакты, которые можно извлечь.

  2. Значение поля «vid-offset», которое возвращается в ваших вызовах.

Для "has-more", это логическое значение указывает, есть ли еще контакты, которые вы можете тянуть через нумерацию страниц.Для "vid-offset" это целое число, сгенерированное API, оно не принимает простое последовательное целое число.

Кроме того, вы получаете только 5 записей за раз, вы также можете простосделайте максимум, так как это всего 100. Это ограничит количество звонков, которые вам нужно сделать.

Наконец, вы можете просто захотеть добавить их в файл, который затем сможете использовать для чего угодно,т.е. добавление в базу данных, загрузка и т. д.

Итак, я предлагаю изменить исходную функцию, чтобы проверить значение «has-more» для «true», если оно равно true, отправить «vid-offset»значение новой функции, которая делает другой вызов.В этой функции вы можете продолжать проверять эти значения и запускать вашу функцию столько раз, сколько потребуется, пока значение «has-more» не станет ложным.

   // the rest of your function is above

   // Decode the result so you can traverse the data

   $contacts = json_decode($result);

   // Store 'has-more' value

   $has_more = $contacts->has-more; 

   // Check if there are more records

   if($has_more) {

   // Get the offset number provided by API

   $offset = $contacts->vid-offset;

   // Get more records

   getMore($offset);

   } else { 

   // Complete calls and do something else...


   }

}

function getMore($offset) {

// Make cURL call with your your offset value

   $url = $url.'&property=firstname&property=email&count=100&vidOffset=' . $offset;

   $contacts = json_decode($result);

   $has_more = $contacts->has-more; 



   if($has_more) {

   $offset = $contacts->vid-offset;
   getMore($offset);

   } else {

    // Complete calls and do something else...

   }
}

Документация , котораяони действительно довольно ясны , так что я бы тоже немного перечитал.

...