vineri, 20 ianuarie 2012

Pymaxe pentru PHP

Odată cu Pymaxe 0.50 am "împărţit" aplicaţia în două părţi majore: interfaţa, adică partea vizibilă cu care utilizatorul interacţionează şi librăria care, de fapt, nu este decât o clasă ce oferă o interfaţă între programator şi plugin-urile Pymaxe. Iniţial urma ca doar librăria să se denumească Pymaxe, aplicaţia grafică fiind gândită să poarte denumirea de Roxe (lucru care nu s-a mai întâmplat - am zis asta în caz că sunteţi curioşi de ce noul Pymaxe se instalează într-un folder denumit Roxe).

Un mare beneficiu adus de această separare este, pe lângă posibilitatea de a reutiliza clasa Pymaxe în cadrul altui program, că mecanismul de extragere a informaţiilor poate fi portat cu uşurinţă pe mai multe limbaje de programare. Momentan nu am avut timp decât de o versiune pentru PHP a clasei, versiune ce poate fi descărcată de aici. Tot pe această pagină aveţi şi câteva exemple generaliste însă aici vreau să ofer un exemplu de utilizare a acestei clase atunci când tu, ca programator web, vrei să faci o pagină care să ofere posibilitatea de a descărca muzică de pe Trilulilu şi nu vrei să îţi baţi capul cu "ghicirea" adresei stream-ului audio, ci vrei să foloseşti Pymaxe pentru acest lucru.

Ok, să spunem că nu vei dori să oferi decât o simplă interfaţă prin care să oferi utilizatorului posibilitatea de a descărca muzică de pe Trilulilu. Deşi se poate face şi "dintr-o bucată", noi vom folosi două pagini pentru proiectul nostru: o pagină care va cere utilizatorului o adresă de Trilulilu şi o alta care va procesa informaţia introdusă de utilizator şi care va oferi în schimb un link de download. Deci, în primul rând, vom face o pagină HTML (statică, nu punem cod PHP în aceasta) care va arăta cam aşa:

<html>
  <head>
    <title>Trilulilu grabber</title>
    <style></style>
  </head>
  <body>
  <form name="trilu" method="post" action="get.php">
 Introdu adresa: <input type="text" name="url" value="http://"><br/>
 <input type="submit">
  </form>
  </body>
</html>
Salvăm această pagină ca, să zicem, trilulilu.html apoi creeăm o alta, get.php:

<?php
$url = $_POST['url'];
include ('pymaxe.inc.php');

# Iniţializăm clasa Pymaxe
$pymaxe = new Pymaxe;
$pymaxe->init();

# Încărcăm toate plugin-urile disponibile
# (cu toate că, în esenţă, avem nevoie doar de Trilulilu)
foreach ($pymaxe->plugins as $plugin_name=>$plugin_file){
          $pymaxe->loadPlugin($plugin_name);
}

# Folosind URL-ul introdus de utilizator şi preluat prin HTTP POST
# cerem detaliile privind stream-ul folosind getDetails
$details = $pymaxe->getDetails('Trilulilu', $url);
?>
<html>
  <head>
    <title>Trilulilu grabber</title>
    <style></style>
  </head>
  <body>
<?php

# Acum $details este un array asociativ ce conţine câteva chei
# noi vom folosi doar title şi downurl
$titlu = $details['title'];
$downurl = $details['downurl'];

# Acum le afişăm în browser:
echo '<h1>' . . '</h1>
Download link: <a href="' . $downurl . '">' . $downurl . '</a>';
?>
  </body>
</html>

Acum, când va accesa pagina trilulilu.html şi va introduce adresa de Trilulilu după care va apăsa butonul Submit, utilizatorul va fi trimis pe pagina get.php care îi va afişa titlul melodiei şi un link către adresa stream-ului. Din păcate, însă, acest link se pare că nu e accesibil direct din browser aşa că va fi nevoie să salvăm întâi fişierul pe server şi apoi să-i oferim utilizatorului un link către copia locală (ori să îl instruim să folosească un download manager, cum este wget).

Ceea ce este prezentat în acest articol este un caz simplu iar codul a fost făcut în aşa fel încât să fie cât mai minimalistic. Cine va dori să lucreze "profi" va include şi ceva design plus câteva verificări de securitate în get.php. Ideea este că, folosind librăria Pymaxe pentru PHP, doar din câteva linii putem să obţinem un link de download pentru un stream de YouTube sau Trilulilu (şi altele, în funcţie de plugin-urile disponibile).

P.S. O versiune web a Pymaxe este disponibilă de ceva timp la http://stud.usv.ro/~dunitan/ (Desktop -> Pymaxe)