ugrás a tartalomhoz

Hogyan készítsek API-t?

lorko · 2008. Ápr. 21. (H), 10.19
Sziasztok,

elkezdetem írni egy api-t amiről azt hittem működik, de most kiderült, hogy nem mindig.
Ha valaki tud valami jó leírást hogyan csináljunk, fejlesszünk saját api-t azt kérem ossza meg velem.

Előre is köszönöm
 
1

blogmarkok

gex · 2008. Ápr. 21. (H), 11.34
http://weblabor.hu/blogmarkok/11133
http://weblabor.hu/blogmarkok/17731
http://weblabor.hu/blogmarkok/17400
2

ezek is hasznosak

lorko · 2008. Ápr. 21. (H), 16.28
köszi a linkeket,

de nekem alapoktól kellene egy példa, vagy leírás, egy "hello word" szintű,
és azt se bánnám ha perl alapon menne.

tehát a weboldalba beteszem például.:
<script src="http://somedomain.com/api.pl?apikey=123ABC" type="text/javascript"></script>
és akkor az történik a server oldalon, hogy...
3

én nem értem

vbence · 2008. Ápr. 21. (H), 20.55
Te szeretnéd, hogy van egy oldalad, amiről bárki elérhet szolgáltatásokat. Jól értem? Ha eza célod, akkorelőször gondold át, milyen funkciókat szeretnél exportálni, aztán meg uccu neki. Mi a kérdés?
4

jól érted

lorko · 2008. Ápr. 21. (H), 21.52
Egy mondhatni alap api-t szertnék csinálni(, de lehet ehhez nem is api kell,
vagy nem megfelelő rá a kifejezés).

Ami van:
Adott A szerver, ezen egy weblap ami statikus xhtml oldal,
ezen a szerveren nem tudok semmit futtani,
van B szerver amin letölthető tartalmak vannak pl.: képek,
itt tudok perl-t futtatni.

Amit meg kellen valósítani:
A weblapon rákattintok egy linkre amivel leszeretnék tölteni egy képet,
de előtte meg kell nézni egy reklámot, amikor annak vége akrok ki teszek egy linket
amire kattintva jön letöltésre a kép egy streembe rakva.

Arra gondoltam, hogy ez egy API-val megvalósítható,
úgy mint a google map API-jánál, ahol ha jó az apikey és a host akkor
a megadott longitude és langitude alapján ad egy képet.

Tehát:
Betöltődik a weblap,
meghívódik az api,
a letölteni kívánt kép azonosítóját átadom az apin keresztül,
a B szerver válszban küldi a linket, ezt kiteszem és lehet letölteni.

Pórbáltam már keresni tutorialokat, de nem találtam olyat ami végigvezet
egy megoldásig, konkrét kivitelezésig.

Segítséged előre is köszönöm.
5

Időzített link PHP-ben

vbence · 2008. Ápr. 22. (K), 01.08
A szétválasztás okát nem igazán értem... Ha az egyik tárhely biztosít neked sok helyet (a képeknek ugyebár) és aktív szkriptelést, akkor miben jobb a másik? A dolognak eléggé olyan szaga van, hogy egy szolgáltatást akarsz elindítani, ugyanakkor mindenféle ingyenes hostingok között trükközöl. Erre egyszerű a megoldás: ha hiszel a dologban, szánj rá egy tizest, és domannévtől kezdve a minőségi tárhelyig meglesz minden mondjuk fél évre.

Ha a kérdés technikai részénél maradunk, én így csinálnám:
Van egy statikus oldal, ez a katalógus. A letöltő linkek a dinamikus tárhelyre mutatnak, mégpedig mindenféle key nélkül, a lehető legegyszerübb formában:
http://dinamikus.hu/valami/letolt.php?kep=maci3

A letolt.php behoz neked egy oldalt, amin a reklám fut (akár iframe-ben is lehet, így jöhet mondjuk egy harmadik szerverről). A reklámon kívül ott lesz egy link, ami csak X másodperc után jelenik meg (ez JS-sel könnyen megoldható).

A véldelmet nem a JS jelenti majd, hanem az, hogy maga a link sem lesz érvényes kevesebb, mint X másodpercen belül. Ez pedig a következő képpen néz ki:
http://dinamikus.hu/valami/tenylegletolt.php?kep=maci3&time=1234567891&md5=1f3870be274f6c49b3e31a0c6728957f

A kep még mindig a kép neve (persze lehet numerikus azonosító is). A time, az első időpont, amikor a link működni fog (ez az aktuális unix timestamp + X másodperc, ami a reklám hossza). Az md5 pedig egy aláírásként működik, hogy csakis a te szervered generálhasson ilyen URL-eket, más ne találhasson ki. A generálás (a letolt.php-ben):

$titok = "Valami nagyon titkos szöveg!";
$masodperc = 15; // például ennyi másodpercig várjon

$kep = $_GET["kep"];

$time = time () + $masodperc;
$md5 = md5 ($kep . "/" . $time . "/" . $titok);

$url = "tenylegletolt.php?kep={$kep}&time={$time}&md5={$md5}";
Az ellenőrzés (tenylegletolt.php):

$titok = "Valami nagyon titkos szöveg!";

$kep = $_GET["kep"];
$time = $_GET["time"];
$md5 = $_GET["md5"];

// érvényes-e az aláírás
if ($md5 != md5 ($kep . "/" . $time . "/" . $titok))
    exit ();

// korai "kattintás"
if ($time > time ())
    exit ();

// késői "kattintás" - a kibocsájtott link 1 percig él
if ($time  + 60 < time ())
    exit ();

// file küldése
header("Content-type: image/jpeg");
readfile($kep . ".jpg");
Persze itt kihagytam olyan fontos ellenőrzéseket, hogy a kép valóban ott van-e (ne küldjön el bármilyen fájlt a szerverről), és hasonlók, de az már egy másik kérdés :)
6

nincs itt trükközés

lorko · 2008. Ápr. 22. (K), 10.14
szia,

nincs itt semmilyen trükközés.:)
Arról van szó, hogy néhány lelkes fiatal grafiukus, rendező, stb. megszeretné osztani azt amit elkészített,
persze nem akarnak éhenhalni ezért van a reklám, amiből várnak némi bevételt.
Egy támogatótól kaptak szervert amin csak a letölthető tartalom lehet, meg van nekik egy szerverük amin a honlapjuk van.

Én meg megígértem hogy megcsinálom.

Köszönöm a segítséget,
eszembe se jutott ez a megoldás(túlbonyolítottam), úgyhogy ezen a úton indulok el.
7

session lehetőség

vbence · 2008. Ápr. 22. (K), 11.10
Használhatsz még session-t is. Ilyenkor a time (és kep) paramétert a sessionben tárolhatod, ahol védve van, ezért nincs szükség az aláírásra sem. Az fsx.hu -n pl így működik. A session persze csak bekapcsolt cookie-val megy, vagy az url-be beleépített session azonosítóval. Összességében nem egyszerübb megoldás az sem...
8

csak adott webhely

lorko · 2008. Ápr. 22. (K), 13.09
már csak azt kéne megoldani hogy a
http://dinamikus.hu/valami/letolt.php?kep=maci3
csak egy webhelyről, hostról lehessen indítani, gondolom ezt referer lekérdezésével tudom megtenni.
9

Miért?

vbence · 2008. Ápr. 22. (K), 13.30
Miért lenne baj, ha más is linkelhet rá, ha a reklámot végig kell néznie?
10

igazadvan

lorko · 2008. Ápr. 22. (K), 13.38
teljesen igazad van, mert az számít, hogy megnézzék a reklámot.
ha elkészül az oldal küldetek neked egy filmet limitált kiadású dvd-n.
11

köszi

vbence · 2008. Ápr. 22. (K), 21.12
köszi :)