plesk client api
Bir kaç gün önce bir projede Plesk panelde kaytılı domainlere yeni mail adresi ekleme, silme, düzenleme gibi işlemleri yapmam gerekiyordu. Bunun üzerine küçük çaplı araştırmalar sonucunda Plesk’in bir API si olduğunu öğrendim ve araştırmalarımı birazcık daha sürdürdükten sonra gerekli dökümanları elde etmiştim ve oturup ihtiyacıma uygun birşeyler çıkartmaya başladım.
Öncelikle size sistemin nasıl işlediğinden bahsetmek istiyorum;
Plesk Panelin API uyumlu sürümlerinde “enterprise/control/agent.php” konumundaki dosyaya Plesk panelin anlayacağı dilden (: XML verileri göndererek ve yine aynı yöntemle cevaplarını alarak işlemlerimiz yapıyor ve işlem sonuçlarını görüyoruz. Fazla söze gerek yok (:
Plesk, Burda ve burda gerekli açıklamaları ve örnekleri yapmış.
Gelelim benim örneğime;
php nin cURL kütüphanesini kullanaraktan bu verileri gönderme ve yanıtlarını alma işini yaptım. İşte bu işlemleri yapan sınıfımız;
<?php // <ismailperim@gmail.com> class Mail { public $Host; public $Port = "81"; public $Path = 'enterprise/control/agent.php'; public $Kullanici = "admin"; public $Sifre; public $DomainID; public $Sonuc; public $SonucSayi; public $MailAd; public $MailSifre; private $Oturum; private $Url; private $Basliklar ; public function Mail($_Host = null,$_Port = null ,$_Kullanici = null,$_Sifre = null,$_DomainID =null) { if(!is_null($_DomainID)) { $this->Host = $_Host; $this->Port = $_Port; $this->Kullanici = $_Kullanici; $this->Sifre = $_Sifre; $this->DomainID = $_DomainID; } $this->Url = "http://".$this->Host.":".$this->Port."/".$this->Path.""; $this->Basliklar = array( 'HTTP_AUTH_LOGIN: '.$this->Kullanici.'', 'HTTP_AUTH_PASSWD: '.$this->Sifre.'', 'Content-Type: text/xml'); $this->Oturum = curl_init(); curl_setopt($this->Oturum, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($this->Oturum, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($this->Oturum, CURLOPT_HTTPHEADER, $this->Basliklar); curl_setopt($this->Oturum, CURLOPT_URL, $this->Url); curl_setopt($this->Oturum, CURLOPT_RETURNTRANSFER, true); } public function Ekle($_Isim,$_Sifre) { $_Paket = <<<EOP <packet version="1.4.2.0"> <mail> <create> <filter> <domain_id>$this->DomainID</domain_id> <mailname> <name>$_Isim</name> <mailbox> <enabled>true</enabled> </mailbox> <password>$_Sifre</password> <permissions> <cp_access>true</cp_access> </permissions> </mailname> </filter> </create> </mail> </packet> EOP; curl_setopt($this->Oturum, CURLOPT_POSTFIELDS, $_Paket); $_Donen = curl_exec($this->Oturum); //curl_close($this->Oturum); if(eregi("<status>ok</status>",$_Donen)) { $this->Sonuc = "E-mail Adresiniz Eklendi."; $this->SonucSayi = true; } else { $this->Sonuc = "E-mail Adresiniz Eklenemedi"; $this->SonucSayi = false; } return $this->Sonuc; } private function ListeDonustur($_Liste) { //echo $_Liste; $_Donen = array(array()); $Dok = new DOMDocument(); $Dok->loadXML($_Liste); $Sonuclar = $Dok->getElementsByTagName( "result" ); $i = 0; foreach($Sonuclar as $S) { $Isim = $S->getElementsByTagName( "name" ); $_Donen[$i]["isim"] = $Isim->item(0)->nodeValue; $Sifre= $S->getElementsByTagName( "password" ); $_Donen[$i]["sifre"] = $Sifre->item(0)->nodeValue; $i++; } return $_Donen; } public function Liste($_Isim=null) { $this->Mail(); if(!is_null($_Isim)) { $_IsimIc = "<name>$_Isim</name>"; } else { $_IsimIc = ""; } $_Paket = <<<EOP <packet version="1.4.2.0"> <mail> <get_info> <filter> <domain_id>$this->DomainID</domain_id> $_IsimIc </filter> <cp_access/> <mailbox/> <aliases/> <permissions/> </get_info> </mail> </packet> EOP; curl_setopt($this->Oturum, CURLOPT_POSTFIELDS, $_Paket); $_Donen = curl_exec($this->Oturum); //curl_close($this->Oturum); return $this->ListeDonustur($_Donen); } public function Duzenle($_Isim,$_Sifre) { $this->Sil($_Isim); if($this->SonucSayi) { $this->Ekle($_Isim,$_Sifre); if($this->SonucSayi) { $this->Sonuc = "E-Mail Adresiniz Düzenlendi"; $this->SonucSayi=true; } else { $this->Sonuc = "E-Mail Adresiniz Düzenlenemedi"; $this->SonucSayi=false; } } else { $this->Sonuc = "E-Mail Adresiniz Düzenlenemedi"; $this->SonucSayi=false; } } public function Sil($_Isim = null) { if(!is_null($_Isim)) { $_Paket = <<<EOP <packet version="1.4.2.0"> <mail> <remove> <filter> <domain_id>$this->DomainID</domain_id> <name>$_Isim</name> </filter> </remove> </mail> </packet> EOP; curl_setopt($this->Oturum, CURLOPT_POSTFIELDS, $_Paket); $_Donen = curl_exec($this->Oturum); if(eregi("<status>ok</status>",$_Donen)) { $this->Sonuc = "E-Mail Adresiniz Silindi."; $this->SonucSayi = true; } else { $this->Sonuc = "E-Mail Adresiniz Silinemedi"; $this->SonucSayi = false; } } } public function Kapat() { curl_close($this->Oturum); } } ?>




Ya c# projemde pleskte hosting açmak gerekli oldu bana.
Teşekkürler faydalı bi çalışma yapmışsın ama bu kodlar c# olarak lazım bana çok basit olması yeterli yardım edebilirmisin ?
Merhabalar,
Bildiğim kadarıyla plesk api’nin .net için olan kısmı da var. Daha önce kullanmadım fakat var diye biliyorum. Boş bir vaktimde C# da yazabilir veya bunu C# ile çalışabilcek hale getirirsem yayınlarım.
Hocam merhaba,
Ben de bu işlemi biraz daha farklı kodlarla yapıyorum. Verileri alıyorum. veriler sayfa ekranına düz bir metin halinde geliyor. sayfa kaynağını görüntülediğimde ise XML biçiminde.
Ben buradan verileri almak istiyorum. Ancak bir türlü beceremiyorum. XML halindeki formattan istediğim bilgileri nasıl alabilirim?
Teşekkür ederim.
Merhabalar,
Aslında size api tarafından dönen tüm sonuçlar xml. Ama ekrana bastığınız zaman eğer sayfa header’ında ekrana basılan verinin xml olduğunu belirtmezseniz web taraycınız xml kodlarını html gibi algılayarak bu şekilde yorumlayacaktır. Bu durumda ise “” şeklindeki ifadeler gözükmez ve ekranda sadece bu tagler arasındaki verileri metin halie ile görebilirsiniz. Dönen sonuçları SimpleXML kütüphanesini kullanarak XML e parse ederseniz php içerisinden rahatlıkla dönen sonuçlardaki değerlere ulaşabilirsiniz.
SimpleXML
SimpleXML
Aşağıda ise kendim bir örnek belirttim. Burda sizin yanıtınız zaten bir değişkene geleceği için direk o değişkeni simple xml in read methoduna gönderdiğiniz zaman aşağıdaki şekilde nesnelere ulaşabilirsiniz.
Not: Yukarıda belirttiğim XML verisinin, Plesk’in yanıtlarıyla ilgisi yoktur. Örnek olması için aklımdan yazdığım bir şey.