Parametre dizisi kullanarak API çağrısı kurma sorun yaşıyorsunuz

1 Cevap php

Ben Rapidshare API çağrıları göndermek ve söz konusu aramanın sonuçlarını döndürmek için bir sınıf inşa ediyorum. İşte arama yapılmasını istiyorum nasıl:

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

Ve burada sınıf kadar bulunuyor:

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;
    }
}

Açıkçası ben iade $newUrl ve print_r() sorgu dizesini sınamak için kullanıyorum, ve bu da yukarıda gösterilen kod ile olarak gelen budur ediyorum:

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

Olması gerekir:

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

Umarım ben burada yapmak ne çalışıyorum görebilirsiniz: P Muhtemelen ben bulmak için başarısız oluyorum aptalca bir hata ya da bir mantık hatası var.

Şimdiden teşekkürler.

1 Cevap

Sen sahip olmalıdır:

$newUrl = $this->baseUrl;

O sınıfın içinde o sınıfın üyeleri başvurmak için $this kullanmanız gerekir. Ayrıca var üyelerine bildirmek için kullanmayın. Bu PHP4 bulunuyor ve (afaik) önerilmiyor. Bunun yerine private (vb kullanabilirsiniz

Son olarak, parametreleri oluşturmak için döngü büyük ölçüde basitleştirilmiş olabilir ve mantık elde etmek istediğiniz şey için doğru değil. Deneyin:

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;
  }
}

Veya daha da iyisi, kullanmak 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);
  }
}