2010-04-03 22 views
1

Je construis une classe pour envoyer des appels d'API à Rapidshare et renvoyer les résultats de cet appel. Voilà comment je veux l'appel à faire:Problème lors de la configuration de l'appel d'API à l'aide d'un tableau de paramètres

$rs = new rs(); 

$params = array(
    'sub' => 'listfiles_v1', 
    'type' => 'prem', 
    'login' => '10347455', 
    'password' => 'not_real_pass', 
    'realfolder' => '0', 
    'fields' => 'filename,downloads,size', 
    ); 

print_r($rs->apiCall($params)); 

Et voici la classe jusqu'à présent:

class RS 
{ 
    var $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub='; 

    function apiCall($params) 
    { 
     $newUrl = $baseUrl; 
     $keys = array_keys($params); 
     $count = count($params); 
     for($i = 0; $i < $count; $i++) 
     { 
      $newUrl .= $keys[$i]; 
      $newUrl .= '&'; 
      $newUrl .= $params[$keys[$i]]; 
     } 
     return $newUrl; 
    } 
} 

Il est évident que je retourne $newUrl et en utilisant print_r() pour tester la chaîne de requête, et c'est ce que il sort comme avec le code ci-dessus:

sub&listfiles_v1type&premlogin&10347455password&_not_real_passrealfolder&0fields&filename,downloads,size 

Quand il doit être:

http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=listfiles_v1&type=prem&login=10347455&password=not_real_pass&realfolder=0&fields=filename,downloads,size 

J'espère que vous pouvez voir ce que je suis en train de faire ici: P C'est probablement une erreur stupide que je n'arrive pas à trouver ou une erreur logique.

Merci d'avance.

Répondre

1

Vous devriez avoir:

$newUrl = $this->baseUrl; 

Vous devez utiliser $this pour désigner les membres de cette classe à partir de cette classe. N'utilisez pas non plus var pour déclarer des membres. C'est PHP4 et (afaik) déprécié. Au lieu de cela utiliser private (etc.

Enfin, votre boucle pour créer les paramètres peuvent être grandement simplifié et la logique ne correspond pas à ce que vous voulez atteindre Essayez.

class RS { 
    private $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?'; 

    function apiCall($params) { 
    $newUrl = $this->baseUrl; 
    foreach ($params as $k => $v) { 
     $newUrl .= urlencode($k) . '=' . urlencode($v) . '&'; 
    } 
    return $newUrl; 
    } 
} 

Ou, mieux encore, utiliser http_build_query():

class RS { 
    private $baseUrl = 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?'; 

    function apiCall($params) { 
    return $this->baseUrl . http_build_query($params); 
    } 
}