2014-07-09 1 views
4

Wordpress 플러그인을 개발하는 동안 문제가 발생했습니다. 기본적으로 플러그인은 플러그인을 빌드 할 때 분당 6 개로 제한해야하지만 플러그인을 활성화하면 플러그인 요청시 필요한 API 데이터를 6 개 이상 요청해야합니다. 에서.API 요청 제한에 대한 해결 방법

API는 LimelightCRM API (http://help.limelightcrm.com/entries/317874-Membership-API-Documentation)입니다. API의 campaign_view 메소드를 사용하고 있는데, 내가 할 일은 잠재적으로 일괄 적으로 요청을하는 것이지만 문제에 접근하는 방법을 잘 모르겠습니다.

아이디어 1 : 그냥 내 머리 위로 떨어져, 나는 campaign_find_active를 사용하여 플러그인 활성화에 PHP를 확인해야합니다 내가 요청의 수를 계산해야합니다 생각하고있어 그 횟수를 요청 제한 (6)으로 나누고 필요한 모든 데이터를 가지고 Wordpress transients에 저장할 때까지 분당요청을하십시오. 그러나 30 개의 요청을해야한다고 말하면 사용자는 5 분 정도 기다려서 데이터를 다운로드 할 수 없습니다. 필자가 솔루션을 생각해 낼지라도, 플러그인이 6 개 이상의 요청을 할 필요가없는 방식으로 Wordpress transients의 시간 제한을 설정해야 할 수도 있습니다. 그래서 내 생각에, Wordpress 후크를 사용하여 마지막 요청 일괄 처리를 확인하는 동안 요청을 수시로 처리 할 수 ​​있습니까? 그래서 이미 매우 까다로워지고 있습니다. 너희들이 나를 올바른 방향으로 인도 할 수 있을지 궁금해. 이 속도 제한을 이길 수있는 방법에 대한 아이디어가 있습니까?

아이디어 2 : 데이터베이스에 값을 저장하는 크론 작업은 무엇입니까?

//Fetch Campaign ID's 
$t_campaign_find_active = get_transient('campaign_find_active'); 
if(!$t_campaign_find_active){ 
    limelight_cart_campaign_find_active(); 
    $t_campaign_find_active = get_transient('campaign_find_active'); 
    return $t_campaign_find_active; 
} 

//Fetch Campaign Information for each Campaign ID 
$llc_cnames = array(); 
foreach($llc_cids as $count => $id) { 
    if(!get_transient('campaign_view_'.$id)) { 
     limelight_cart_campaign_view($id); 
     $llc_cnames[$id] = get_transient('campaign_view_'.$id); 
    } 
} 

//Merge Campaign ID's and Campaign Info into Key => Value array 
$limelight_campaigns = array_combine($llc_cids, $llc_cnames); 

참고 : 그들은 단순히 하나의 API 요청을 응답을 반환하고, 워드 프레스 과도에 저장하기 때문에 기능 limelight_cart_campaign_find_active()limelight_cart_campaign_view()은 포함되지 않습니다. 필요한 경우 코드를 포함 할 수 있지만이 예제의 목적 상 플러그인의 일부가 작동하므로 포함하지 않았습니다.

+1

아이디어 - 3 [라임 라이트 CRM 지원]에 문의하십시오 (https : //로 limelightcrm .com/contact.php) 무엇을 할 수 있는지 알아보십시오. 때로는 해킹에 너무 익숙한 경우가 있습니다. 상대방에 승인되고 기성품 인 사용자가있을 수도 있습니다. – Boaz

답변

2

나는이 사람에 대한 해결책을 마련했습니다, 나는 그것을 전에 생각해야합니다. 따라서 활성화시 모든 API 데이터를 다운로드하는 것은 현재 속도 제한으로는 불가능하다는 결론에 도달했습니다. 플러그인을 사용할 수있는 대부분의 사람들은 한 번에 자신의 모든 데이터를 다운로드 할 너무 많은 캠페인을 것이다, 내가 코드를 그것이 방식을 유지하는 경우는 속도 제한은 대부분의 시간을 사용할 수 불가피합니다. 따라서 활성화 직후에 플러그인에 대한 API 데이터를 계속 준비하기보다는 AJAX를 사용하여 필요에 따라 API 호출을 수행 할 수있는 기능을 사용자에게 제공 할 것입니다. 그럼 어떻게 작동하는지 설명하겠습니다.

첫 번째로 플러그 인을 활성화하면 처음에는 데이터가 다운로드되지 않고 사용자는 API 자격 증명을 입력해야하며 플러그인이 유효성을 검사하고 자격 증명이 유효하고 API 로그인에 성공했습니다. 하나의 API 요청을 사용합니다.

"제품 추가"관리 페이지에 미리 채워진 캠페인 목록이있는 대신 사용자는 "제품 추가"페이지의 버튼을 클릭하면 AJAX campaign_find_active 요청으로 캠페인 ID를 가져옵니다. 캠페인 ID와 이름의 드롭 다운 메뉴가 표시됩니다. 하나의 요청 만 사용합니다.

드롭 다운 데이터를 가져온 후에는 사용하려는 캠페인을 선택해야하며 캠페인 ID를 선택하면 해당 캠페인 데이터를 가져 오기위한 campaign_view 요청을 만들기위한 다른 버튼이 플러그인에 표시됩니다 신분증과. 그러면 제품을 선택할 수있는 다른 드롭 다운 메뉴가 나타납니다.또한 드롭 다운 값에 따라 AJAX 버튼을 표시하거나 숨기려면 CSS 및 jQuery가 약간 필요합니다. 하나의 API 요청 만 사용하며 요청이 자동으로 생성되지 않고 버튼 클릭이 필요하기 때문에 가져온 첫 번째 드롭 다운 메뉴에서 캠페인 ID를 선택할 때 사용자가 여러 API 요청을하지 않습니다.

그러면 사용자는 게시를 클릭하고 필요한 각광 데이터가 첨부되고 캐시 된 WordPress 색인 제품을 갖게됩니다. 모든 API 요청은 시간 제한이 1 시간 인 일시적으로 저장되며 시간은 업데이트되므로 업데이트가 필요한 경우 24 시간을 기다릴 필요가 없습니다. 또한 필요에 따라 필요할 때 다시 다운로드 할 수 있도록 전환 페이지를 지우는 버튼이 설정 페이지에 포함됩니다. 또한 다소 까다로워 질 수도 있지만,이 질문의 목적 상 문제가되지는 않습니다.

총 3 회의 API 요청 만 사용하고 있습니다. 한 번에 너무 많은 요청을 사용하는 경우 사용자에게 오류 메시지를 표시 할 수 있도록 카운터를 만들 수도 있습니다. "API의 제한 인 분당 10 개 요청에 도달했습니다. 60 초 정도 기다렸다가 다시 시도하십시오."

의견, 제안 또는 비평을 환영합니다. API 요청 제한으로 어려움을 겪고있는 누군가에게 도움이되기를 바랍니다. AJAX는 사용자에게 좀 더 많은 제어 권한을 부여하지 않으려는 경우이를 해결할 수있는 좋은 방법입니다. 난 그냥 40 개 API의 계정을 만들어 무작위로 각 요청에 대해 하나를 선택

2

.. 잘 작동

$api_acounts = array(
 
    "account1" => "asdfasdfdsaf", 
 
    "account2" => "asaasdfasdf", 
 
    "account3" => "asdfasdf", 
 
); 
 
$rand = rand(1,count($api_acounts)); 
 
$username = "account".$rand; 
 
$password = $api_acounts['account'.$rand];

관련 문제