Zad´ an´ı bakal´ aˇ rsk´ e pr´ ace • Navrhnˇete a implementujte automatick´ y pˇrihazovac´ı program pro aukˇcn´ı port´ al ebay.com. • Program bude sledovat zadanou aukci a v poslednich 5 sekund´ach pˇrihod´ı v t´eto aukci zadanou cenu. • Program mus´ı umˇet hl´ıdat v´ıce aukc´ı z´aroveˇ n. • Program mus´ı bˇeˇzet pod operaˇcn´ım syst´emem Linux. • GUI nen´ı vyˇzadov´ ano, program lze ovl´adat pˇres pˇr´ıkazovou ˇr´adku.
1
2
ˇ e vysok´e uˇcen´ı technick´e v Praze Cesk´ Fakulta elektrotechnick´a Katedra poˇc´ıtaˇc˚ u
Bakal´aˇrsk´a pr´ace
Automatick´ y pˇ rihazovac´ı syst´ em pro e-bay.com Ondˇrej Hrabal
Vedouc´ı pr´ace: Ing. Jiˇr´ı Sm´ıtka
Studijn´ı program: Elektrotechnika a informatika, dob´ıhaj´ıc´ı, Bakal´aˇrsk´ y Obor: V´ ypoˇcetn´ı technika 10. bˇrezna 2013
iv
v
Podˇ ekov´ an´ı Velmi r´ ad bych t´ımto podˇekoval vedouc´ımu sv´e bakal´aˇrsk´e pr´ace, Ing. Jiˇr´ımu Sm´ıtkovi, za hodnotn´e rady a veˇsker´ y ˇcas, kter´ y mi vˇenoval. D´ale pak sv´ ym rodiˇc˚ um a kamar´ad˚ um za vynikaj´ıc´ı pasivn´ı podporu v dlouhodob´e pr´aci.
vi
vii
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem pr´ aci vypracoval samostatnˇe a pouˇzil jsem pouze podklady uveden´e v pˇriloˇzen´em seznamu. Nem´am z´ avaˇzn´ y d˚ uvod proti uˇzit´ı tohoto ˇskoln´ıho d´ıla ve smyslu §60 Z´akona ˇc. 121/2000 Sb., o pr´ avu autorsk´em, o pr´ avech souvisej´ıc´ıch s pr´avem autorsk´ ym a o zmˇenˇe nˇekter´ ych z´akon˚ u (autorsk´ y z´ akon).
V Hranic´ıch dne 18. 5. 2010
.............................................................
viii
Abstract The purpose and goal of my work is to design and implement an automatic bidding system for (the auction portal) e-bay.com. The program will watch a given auction and make a bid in last 5 seconds to win the auction and also has to be able watch more auctions simultaneosly. The program must be compatible with Linux operating system. GUI is not required as the program can be controlled via command line.
Abstrakt Podstatou a c´ılem pr´ ace je navrhnout a implementovat automatick´ y pˇrihazovac´ı program pro aukˇcn´ı port´ al e-bay.com. Program bude sledovat zadanou aukci a v posledn´ıch 5 sekund´ach pˇrihod´ı v t´eto aukci zadanou cenu, z´ aroveˇ n vˇsak mus´ı umˇet hl´ıdat v´ıce aukc´ı z´aroveˇ n. Program mus´ı bˇeˇzet pod operaˇcn´ım syst´emem Linux, pˇriˇcemˇz grafick´e uˇzivatelsk´e rozhran´ı (GUI) nen´ı vyˇzadov´ ano, ovl´ad´an´ı lze prov´est pˇres pˇr´ıkazovou ˇr´adku.
ix
x
Obsah ´ 1 Uvod 1.1 Historie eBay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Princip on-line aukce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Souˇcasn´e trendy on-line nakupov´an´ı . . . . . . . . . . . . . . . . . . . . . . .
1 1 2 2
2 Motivace 2.1 C´ıle pr´ ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 V´ ysledek pr´ ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Existuj´ıc´ı implementace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 5 6 6
3 Anal´ yza a n´ avrh ˇ reˇ sen´ı 3.1 Programovac´ı jazyk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Pouˇzit´e prostˇred´ı pro tvorbu . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 9 9
4 Realizace 4.1 Implementace vyuˇz´ıvaj´ıc´ı eBay API . . . . . . . . . . . 4.2 Pˇrihl´ aˇsen´ı do syst´emu . . . . . . . . . . . . . . . . . . . 4.2.1 Struktura XML . . . . . . . . . . . . . . . . . . . 4.3 Z´ısk´ an´ı informac´ı o poloˇzce na eBay . . . . . . . . . . . 4.4 Pˇrihozen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1 Klasick´ a pˇrihazovac´ı aukce . . . . . . . . . . . . 4.4.1.1 Vytvoˇren´ı nab´ıdky a pˇrihozen´ı . . . . . 4.4.1.2 Monitorov´an´ı aukc´ı . . . . . . . . . . . 4.4.1.3 Vyhodnocen´ı ˇcasu pˇrihozen´ı . . . . . . 4.4.1.4 Zruˇsen´ı monitorovan´e aukce . . . . . . 4.4.1.5 N´ azorn´ y popis cel´eho procesu pˇrihozen´ı 4.4.2 Koupˇe poloˇzky za fixn´ı cenu . . . . . . . . . . . . 4.4.3 Posl´ an´ı nejlepˇs´ı nab´ıdky . . . . . . . . . . . . . . 4.5 Posl´ an´ı poˇzadavku PlaceOffer . . . . . . . . . . . . . . . 4.5.1 Struktura HTTP hlaviˇcky . . . . . . . . . . . . . 4.5.2 Struktura XML poˇzadavku . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
11 11 12 13 15 16 18 18 19 20 21 21 22 22 22 22 23
5 Testov´ an´ı 25 5.1 Jednotkov´e testy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.2 Testy grafick´eho uˇzivatelsk´eho rozhran´ı . . . . . . . . . . . . . . . . . . . . . . 26 5.2.1 Mockov´ an´ı objekt˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
xi
xii
OBSAH
5.3
5.4 5.5
Praktick´e testov´ an´ı testery . . 5.3.1 V´ ysledky testov´ an´ı . . ˇ 5.3.2 Cekac´ ı dialogov´e okno 5.3.3 Resource bundle . . . Funkˇcnost programu . . . . . Zhodnocen´ı testov´ an´ı . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
27 28 28 29 30 30
6 Z´ avˇ er
31
Literatura
33
A Seznam pouˇ zit´ ych zkratek
35
B Instalaˇ cn´ı a uˇ zivatelsk´ a pˇ r´ıruˇ cka
37
C Obsah pˇ riloˇ zen´ eho CD
43
Seznam obr´ azk˚ u 1.1
Ofici´ aln´ı internetov´ a str´ anka eBay . . . . . . . . . . . . . . . . . . . . . . . .
2
2.1
Program JBidwatcher verze 2.1pre5 . . . . . . . . . . . . . . . . . . . . . . . .
6
3.1 3.2
Model poˇzadavk˚ u pˇrihazovac´ıho programu . . . . . . . . . . . . . . . . . . . . Model pˇr´ıpad˚ u uˇzit´ı pˇrihazovac´ıho programu . . . . . . . . . . . . . . . . . .
7 8
4.1 4.2 4.3 4.4 4.5
Model nasazen´ı pˇrihazovac´ıho programu . . . . . . . . . Sekvenˇcn´ı diagram uloˇzen´ı pˇrihlaˇsovac´ıch u ´daj˚ u do XML Z´ısk´ an´ı tzv. Item number u poloˇzky na eBay . . . . . . Okno zobrazuj´ıc´ı pˇrihazovac´ı menu . . . . . . . . . . . . Bussiness model pˇrihozen´ı . . . . . . . . . . . . . . . . .
. . . . .
13 15 16 17 21
5.1 5.2
Graf v´ ysledk˚ u dotazn´ıku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Informaˇcn´ı dialogov´e okno . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28 29
B.1 B.2 B.3 B.4 B.5
Hlavn´ı okno pˇrihazovac´ıho programu . . . . . . . . Okno zobrazuj´ıc´ı pˇrihlaˇsovac´ı u ´daje do eBay . . . . Okno zobrazuj´ıc´ı uloˇzen´ı nebo naˇcten´ı souboru . . Okno zobrazuj´ıc´ı pˇrihazovac´ı menu . . . . . . . . . Okno zobrazuj´ıc´ı tabulku monitorovan´ ych poloˇzek
. . . . .
38 39 40 41 42
C.1 Seznam pˇriloˇzen´eho CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
xiii
. . . . .
. . . . .
. . . . .
. . . . . souboru . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
xiv
´ U ˚ SEZNAM OBRAZK
Kapitola 1
´ Uvod V bakal´ aˇrsk´e pr´ aci se zab´ yv´ am asi nejzn´amˇejˇs´ı americkou internetovou aukˇcn´ı s´ın´ı eBay[6]. Hlavn´ım t´ematem m´e pr´ ace je vytvoˇrit aplikaci schopnou automaticky sledovat v´ıce aukc´ı soubˇeˇznˇe a v posledn´ı chv´ıli prob´ıhaj´ıc´ı aukce pˇrihodit pˇredem nastavenou ˇc´astku. Pokus´ım se ˇcten´ aˇre kr´ atce obezn´ amit s histori´ı a souˇcasn´ ymi trendy internetov´ ych aukc´ı. D´ale bl´ıˇze specifikuji c´ıle, vytvoˇr´ım anal´ yzu a n´avrh ˇreˇsen´ı, provedu realizaci, tedy implementaci ˇreˇsen´ı, kterou ˇr´ adnˇe otestuji a na z´ avˇer zhodnot´ım splnˇen´ı c´ıl˚ u bakal´aˇrsk´e pr´ace a budu diskutovat o jej´ım dalˇs´ım moˇzn´em pokraˇcov´an´ı.
1.1
Historie eBay
Obchodn´ı aukˇcn´ı port´ al eBay 1.1 (d´ale jen eBay) byl zaloˇzen v San Jos´e 4. z´aˇr´ı 1995 poˇc´ıtaˇcov´ ym program´ atorem Pierrem Omidyarem jako AuctionWeb.1 AuctionWeb patˇril Omidyarovˇe konzultaˇcn´ı spoleˇcnosti jm´enem Echo Bay Technology Group. Protoˇze vˇsak dom´enu echobuy.com tehdy vlastnila jedna kanadsk´a tˇeˇzebn´ı spoleˇcnost, Sierr Omidyar zkr´atil n´ azev a v z´ aˇr´ı 1997 zaregistroval dom´enu ebay.com. Za tu dobu proˇsla ˇradou zmˇen a vylepˇsen´ı. Od roku 1999 eBay proˇz´ıv´a mezin´arodn´ı expanzi2 a stal se nejvˇetˇs´ı svˇetovou aukˇcn´ı s´ın´ı, kter´a p˚ usob´ı jiˇz ve ˇctyˇrech des´ıtk´ach zem´ı na vˇsech svˇetov´ ych kontinentech. Dnes m´a v´ıce neˇz 90 milion˚ u uˇzivatel˚ u po cel´em svˇetˇe. eBay tak´e u ´zce spolupracuje s dalˇs´ımi svˇetov´ ymi softwarov´ ymi syst´emy[13] jako je PayPal, MoneyBookers ˇci BidPay nebo Skype, kter´ y v roce 2005 koupil a stal se tak jeho vˇetˇsinov´ ym vlastn´ıkem. M´alokdo v´ı, ˇze je eBay pr˚ ukopn´ıkem v porovn´av´an´ı cen produkt˚ u od jednotliv´ ych prodejc˚ u, kter´e je velmi popul´ arn´ım a rozˇs´ıˇrilo se do cel´eho svˇeta (u n´as zn´ame napˇr. zbozi.cz). Za zm´ınku tak´e stoj´ı, ˇze od roku 2008 funguje v Praze eBay Center of Excellence, mar´ ketingov´e a analytick´e centrum zamˇeˇruj´ıc´ı se na evropsk´e a asijsk´e trhy. Uplnou novinkou je ofici´aln´ı expanze eBay k datu 25. bˇrezna 2010 na ˇcesk´ y trh, coˇz pˇrin´aˇs´ı plnou lokalizaci do ˇcesk´eho jazyka[4]. 1 2
Prvn´ı prodanou poloˇzku a tou bylo rozbit´e laserov´e ukazov´ atko, kter´e se prodalo za cenu 14.83 dolar˚ u. Trˇziˇstˇe eIM tzv. elektronick´ y mezin´ arodn´ı obchodn´ı port´ al.
1
´ KAPITOLA 1. UVOD
2
Obr´ azek 1.1: Ofici´ aln´ı internetov´a str´anka eBay
1.2
Princip on-line aukce
Aktivnˇe se u ´ˇcastnit aukce[3] mohou jen registrovan´ı uˇzivatel´e, ostatn´ı sm´ı jen aukci pozorovat. Registrace je zdarma, pˇriˇcemˇz se zpravidla vyˇzaduje jm´eno, pˇr´ıjmen´ı, kontaktn´ı a emailov´a adresa, na kterou je pot´e zasl´ an potvrzovac´ı email, kter´ y obsahuje odkaz, po jehoˇz kliknut´ı se dokonˇc´ı registrace. Aukce prob´ıhaj´ı od zvolen´e ˇc´ astky a trvaj´ı r˚ uznˇe dlouho (zpravidla ne d´ele jak mˇes´ıc). Aukci vyhr´av´a pochopitelnˇe nejvyˇsˇs´ı nab´ıdka. Kromˇe klasick´eho aukˇcn´ıho pˇrihazov´an´ı“, ” ˇcemuˇz se na eBay ofici´ alnˇe ˇr´ık´ a Chinese auction, lze vyuˇz´ıt moˇznosti Buy it now, coˇz znamen´a nakoupit zboˇz´ı okamˇzitˇe za stanovenou fixn´ı cenu. Tyto dva typy aukc´ı je moˇzno kombinovat tak, ˇze dan´a poloˇzka aukce je draˇzena tradiˇcn´ım zp˚ usobem a pˇritom m´a nastavenu fixn´ı cenu. Je zˇrejm´e, ˇze fixn´ı cena je vyˇsˇs´ı neˇz poˇc´ ateˇcn´ı cena nastaven´a klasick´ ym pˇrihazov´an´ım. D´ale lze vyuˇz´ıt tˇret´ıho typu aukce, jenˇz se vyskytuje pouze spoleˇcnˇe s Buy it now aukc´ı a to je tzv. Best offer. To znamen´ a, ˇze kromˇe moˇznosti koupˇe poloˇzky za fixn´ı cenu, je umoˇznˇeno prodejci udˇelat nab´ıdku vlastn´ı ceny, kterou m˚ uˇze a nemus´ı pˇrijmout. Po skonˇcen´ı aukce m´a prodejce sedm dn´ı na vyˇr´ızen´ı obchodu, tedy v´ ymˇeny zboˇz´ı a penˇez. Je uˇziteˇcn´e m´ıt zaregistrovan´ yu ´ˇcet v syst´emu PayPal, protoˇze se ho d´a u vˇetˇsiny aukc´ı vyuˇz´ıt. Nejlepˇs´ı je m´ıt u ´ˇcet ovˇeˇren´ y, k ˇcemuˇz staˇc´ı registrovan´a platebn´ı karta s neblokovanou moˇznost´ı on-line plateb.
1.3
Souˇ casn´ e trendy on-line nakupov´ an´ı
Internetov´ a aukce se posl´eze stala celosvˇetov´ ym hitem, jenˇz umoˇzn ˇuje lidem prod´avat a nakupovat ˇsirok´e spektrum zboˇz´ı a sluˇzeb on-line. D´ıky velmi ˇsirok´e nab´ıdce zboˇz´ı od prodejc˚ u z cel´eho svˇeta lze pˇres eBay koupit ˇci prodat prakticky cokoliv3 . Aukce eBay se nachaz´ı na nˇekolika dom´en´ ach (ebay.com, ebay.de, ebay.ca, ebay.co.uk, ebay.cz, ebay.com.au 3
Jsou zn´ amy i pˇr´ıpady, kdy nespokojen´ y manˇzel prod´ aval v aukci svou manˇzelku.
ˇ ´ TRENDY ON-LINE NAKUPOVAN ´ ´I 1.3. SOUCASN E
3
atd.), kter´e jsou vz´ ajemnˇe propojeny, tud´ıˇz pro spokojen´e nakupov´an´ı staˇc´ı jeden uˇzivatelsk´ y u ´ˇcet. Pro informaci uvedu i jin´e konkurenˇcn´ı aukˇcn´ı port´aly: • http://www.amazon.com • http://www.aukro.cz • http://heureka.cz • http://ikup.cz V´ yhod internetov´ ych aukc´ı je nespoˇcet, proto kr´atce uvedu jen ty hlavn´ı. V prv´e ˇradˇe je to nab´ıdka obrovsk´eho sortimentu zboˇz´ı, kter´e nem˚ uˇze konkurovat ˇz´adn´ y obchod na svˇetˇe. D´ale jsou to niˇzˇs´ı ceny, jelikoˇz aukˇcn´ı syst´em pruˇznˇe reaguje na celkovou popt´avku a nab´ıdku zboˇz´ı, tud´ıˇz poskytuje rovnov´ aˇznou cenu. Z dalˇs´ıch v´ yhod jmenujme napˇr. snadnou komunikaci mezi prodejci a z´ akazn´ıky, fotografie a popisy zboˇz´ı, d´ale pak vyhled´av´an´ı podle kl´ıˇcov´ ych slov a v neposledn´ı ˇradˇe pohodlnost vyˇr´ızen´ı obchodu (ponˇevadˇz vˇse, co ˇclovˇek potˇrebuje, je zaregistrovan´ y u ´ˇcet na port´alu a zaˇr´ızen´ı pˇripojen´e k internetu) a rychlost, protoˇze kaˇzd´ y prodejce je povinen m´ıt zboˇz´ı fyzicky k dispozici, tud´ıˇz nehroz´ı probl´em jako v ˇradˇe internetov´ ych obchod˚ u, kdy zboˇz´ı nen´ı skladem dostupn´e. Existuj´ı ovˇsem i nev´ yhody. A to kupˇr´ıkladu placen´ı poˇstovn´eho, jeˇz se m˚ uˇze prodraˇzit v pˇr´ıpadˇe, ˇze nakupujeme od v´ıce prodejc˚ u. Dalˇs´ı nev´ yhodou je nutnost bojovat“ se soupeˇri v ” aukci, kteˇr´ı maj´ı z´ ajem o to sam´e zboˇz´ı. Tento probl´em se pokus´ım vyˇreˇsit ve sv´e bakal´aˇrsk´e pr´aci.
4
´ KAPITOLA 1. UVOD
Kapitola 2
Motivace Motivac´ı pro vytvoˇren´ı programu mi bylo zjiˇstˇen´ı, ˇze eBay poskytuje API pro nˇekter´e sv´e sluˇzby.1 To se mi jev´ı jako velmi kladn´ y pˇr´ıstup, z kter´eho mohou ˇcerpat i ostatn´ı v´ yvoj´ aˇri. Tato pr´ ace nen´ı reˇserˇsn´ı, coˇz znamen´a, ˇze se nesnaˇz´ım popsat r˚ uzn´e zp˚ usoby dosaˇzen´ı t´ehoˇz v´ ysledku, ale naopak vol´ım jeden, dle m´eho n´azoru nejlepˇs´ı a nejjednoduˇsˇs´ı (na ostatn´ı ˇreˇsen´ı pˇr´ıpadnˇe upozorˇ nuji) a ten podrobnˇe rozeb´ır´am. Vˇse jsem se snaˇzil co moˇzn´ a nejpraktiˇctˇeji vysvˇetlit a popsat, aby ˇcten´aˇr dok´azal snadno proniknout do problematiky.
2.1
C´ıle pr´ ace
Hlavn´ım c´ılem t´eto pr´ ace je na z´akladˇe uveden´ ych poˇzadavk˚ u vytvoˇrit funguj´ıc´ı program, a ˇr´adnˇe ho otestovat. • Popis ˇreˇsen´eho probl´emu, vymezen´ı c´ıl˚ u bakal´aˇrsk´e pr´ace a poˇzadavk˚ u na implementovan´ y syst´em. • Zhodnocen´ı existuj´ıc´ıch implementac´ı. • Anal´ yza a n´ avrh implementace. • Vytvoˇren´ı programu a n´ asledn´ y popis implementace. • Testov´ an´ı aplikace. • Zhodnocen´ı splnˇen´ı c´ıl˚ u bakal´aˇrsk´e pr´ace a vlastn´ıho pˇr´ınosu. • Diskuze dalˇs´ıho moˇzn´eho pokraˇcov´an´ı pr´ace. 1
O tom pozdˇeji v anal´ yze a n´ avrhu ˇreˇsen´ı.
5
6
KAPITOLA 2. MOTIVACE
2.2
V´ ysledek pr´ ace
Jak vypad´ a konkr´etn´ı podoba v´ ysledn´eho programu? Je to desktopov´a aplikace, kter´a: • po zad´an´ı pˇrihlaˇsovac´ıch u ´daj˚ u vytvoˇr´ı spojen´ı s aukˇcn´ım port´alem eBay.com, • podle ID pˇr´ısluˇsn´e aukce zobraz´ı informace o dan´e aukci, • dok´aˇze monitorovat v´ıce aukc´ı souˇcasnˇe, • zjist´ı ofici´ aln´ı ˇcas aukˇcn´ıho port´ alu eBay.com pro synchronizaci pˇresn´eho ˇcasu pˇr´ıhozu“, ” • po nastaven´ı fin´ aln´ı ˇc´ astky pˇrihod´ı“ tuto sumu v posledn´ıch 5 sekund´ach aukce, ” • funguje pod operaˇcn´ım syst´emem Linux i Windows, • m´a grafick´e uˇzivatelsk´e prostˇred´ı (GUI).
2.3
Existuj´ıc´ı implementace
V souˇcasn´e dobˇe je mi zn´ ama pouze jedna desktopov´a aplikace funguj´ıc´ı na podobn´em principu a to jBidwatcher[10]. Je to freeware program implementovan´ y v Javˇe, maj´ıc´ı za u ´kol monitorovat a pˇrihazovat ˇc´ astku v posledn´ım momentˇe aukce. Kromˇe toho umoˇzn ˇuje vyhled´av´an´ı poloˇzek na eBay a ˇcasovou synchronizaci s eBay serverem. V dobˇe psan´ı t´eto pr´ace se aplikace nach´ azela v pre-release stadiu, viz Obr´azek 2.1.
Obr´ azek 2.1: Program JBidwatcher verze 2.1pre5
D´ale existuje nˇekolik doplˇ nk˚ u pro prohl´ıˇzeˇc Mozilla Firefox[7], jeˇz jsou vˇetˇsinou neaktu´aln´ı a zastaral´e s t´ım, jak eBay mˇen´ı sv´e str´ anky a zabezpeˇcuje se proti sniffingu[18] nebo jsou tyto pluginy propojen´e s u ´ˇcty on-line aplikaci[2], kter´e vˇsak vyˇzaduj´ı registraci a maj´ı jist´e omezen´ı ˇci nev´ yhody, jako kupˇr´ıkladu si vynucuj´ı pod´ıl na vyhran´e aukci nebo pˇri zad´an´ı monitorov´an´ı nov´e aukce poˇzaduj´ı zaplacen´ı jednor´azov´eho poplatku apod.
Kapitola 3
Anal´ yza a n´ avrh ˇ reˇ sen´ı Jak´e poˇzadavky jsou tedy kladeny na program? Vych´az´ım z ofici´aln´ıho zad´an´ı pr´ace a d´ale pak poˇzadavk˚ u bˇeˇzn´eho uˇzivatele. Aplikace by mˇela b´ yt stabiln´ı a co se t´ yk´a ovl´ad´ an´ı uˇ zivatelsky pˇ r´ıvˇ etiv´ a. Z tohoto d˚ uvodu jsem se rozhodl implementovat GUI, ovˇsem pˇri podm´ınce zachov´ an´ı jednoduchosti. A to proto, ˇze bych byl nerad, kdyby se GUI stalo obtˇeˇzuj´ıc´ım faktorem, jenˇz uˇzivateli znepˇrehledˇ nuje ˇcinnost a zhorˇsuje schopnosti ovl´ adat program a orientovat se v nˇem. Co se t´ yk´a stability programu jsou kladeny n´aroky pˇredevˇs´ım na chyby zp˚ usoben´e uˇzivatelem, jako napˇr. nevhodn´a forma vstupn´ıch dat i na chyby prostˇre” d´ı“ jako je napˇr. n´ ahl´ a ztr´ ata internetov´eho spojen´ı. Jednou z d˚ uleˇzit´ ych a ˇcasto opom´ıjen´ ych vlastnost´ı je tak´e nen´ aroˇ cnost instalace programu a jeho spuˇ stˇ en´ı. Tady bych, i z d˚ uvod˚ u popsan´ ych n´ıˇze 3.1, preferoval programovac´ı jazyk Java, jenˇz m´a tu moˇznost vytvoˇrit spustiteln´ y soubor - jar archiv, coˇz je pro bˇeˇzn´eho uˇzivatele pohodlnˇejˇs´ı neˇz napˇr. spouˇstˇet bash skript ˇci instalovat lok´ aln´ı server.
Obr´ azek 3.1: Model poˇzadavk˚ u pˇrihazovac´ıho programu
Vzhledem k tomu, ˇze jsem si stanovil za c´ıl, aby program byl schopn´ y se autentifikovat a autorizovat na eBay, bude nutn´e, aby uˇzivatel vyplnil sv´e pˇrihlaˇsovac´ı u ´daje. T´ım vznik´ a dalˇs´ı poˇzadavek na program a nen´ı j´ım nic jin´eho neˇz bezpeˇ cnost. Protoˇze je standardem, aby aplikace umˇela pˇrihlaˇsovac´ı u ´daje naˇc´ıtat a ukl´adat, ponˇevadˇz vyplˇ novat je s kaˇzd´ ym dalˇs´ım spuˇstˇen´ım programu je nepohodln´e, rozhodl jsem se, ˇze tuto funkˇcnost implementuji ve sv´em ˇreˇsen´ı. Za vhodn´ y form´ at uloˇzen´ı textov´ ych dat povaˇzuji stromovou strukturu, s n´ıˇz se velmi dobˇre pracuje. Programovac´ı jazyk Java nab´ız´ı ˇradu technologi´ı pro pr´aci s jazykem
7
´ ´ ˇ SEN ˇ ´I KAPITOLA 3. ANALYZA A NAVRH RE
8
XML. Proto jsem se rozhodl pouˇz´ıt tento znaˇckovac´ı jazyk, jenˇz spln´ı m´e poˇzadavky na jednoduchost pr´ ace a stromovou strukturu. Pracovat budu s DOMem, ponˇevadˇz je mi bliˇzˇs´ı neˇz pr´ace s SAX, i kdyˇz ten m´ a nesporn´e v´ yhody v niˇzˇs´ı pamˇet’ov´e n´aroˇcnosti a rychlosti u vˇetˇs´ıch“ dokument˚ u. J´ a budu ovˇsem pouˇz´ıvat jednoduchou stromovou strukturu, kde ” v´ ysledn´ y dokument nebude velk´ y“ 1 , tud´ıˇz pro ˇreˇsen´ı m´eho probl´emu mi vystaˇc´ı pouˇz´ıvat ” DOM. Co se t´ yk´ a zm´ınˇen´e bezpeˇcnosti, bude vhodn´e data ukl´adat v ˇ sifrovan´ e podobˇ ea pˇri naˇc´ıt´an´ı je deˇsifrovat. Nemysl´ım si, ˇze je nezbytnˇe nutn´e pouˇz´ıt siln´e ˇsifrov´an´ı n´aroˇcn´e na v´ ypoˇcetn´ı v´ ykon. Jde mi sp´ıˇse o to, vyfiltrovat moˇznost pouh´eho otevˇren´ı souboru v textov´em reˇzimu a z´ısk´an´ı tak veˇsker´ ych pˇrihlaˇsovac´ıch u ´daj˚ u. Pro n´azornˇejˇs´ı pˇredstavu jsem vytvoˇril model pˇr´ıpad˚ u uˇzit´ı, kter´ y je zobrazen na n´asleduj´ıc´ım obr´azku 3.2.
Obr´ azek 3.2: Model pˇr´ıpad˚ u uˇzit´ı pˇrihazovac´ıho programu
Podle moˇznost´ı a ˇcasu bych d´ ale aplikaci rozˇs´ıˇril o dalˇs´ı schopnosti, jenˇz by z n´ı udˇelaly mohutnˇejˇs´ı n´astroj na spravov´ an´ı aukc´ı na eBay. Budu d´avat pˇrednost funkcionalit´am, kter´e budou data z eBay z´ısk´ avat a zpracov´ avat, nikoliv dod´avat. 1
Strom nebude obsahovat v´ıce jak 20 uzl˚ u.
3.1. PROGRAMOVAC´I JAZYK
3.1
9
Programovac´ı jazyk
Hled´ an´ı relevantn´ıch informac´ı o eBay mˇe zavedlo na pro mˇe urˇcitˇe nejhodnotnˇejˇs´ı str´anky eBay Developers Programu[5]. Nev´ahal jsem a po bezplatn´e registraci se pˇripojil do v´ yvoj´aˇrsk´eho centra2 . Prvn´ı rozhodnut´ı, kter´e jsem musel uˇcinit, se t´ ykalo programovac´ıho jazyka, v kter´em budu implementovat ˇreˇsen´ı sv´e bakal´aˇrsk´e pr´ace. D˚ uleˇzit´a pro mˇe byla znalost jazyka a jeho multiplatformnost. Developersk´ y program eBay nab´ız´ı podporu pro tato implementaˇcn´ı prostˇred´ı a technologie: • JavaScript Dev Center (JavaScript, JSON, AJAX) • Flash Dev Center (ActionScript, Flex) • PHP Dev Center (PHP, Perl, Python) • Windows Dev Center (.NET, C#, ASP, VB) • Java Dev Center (Java, JSP) Hlavn´ı roli v m´em rozhodnut´ı hr´aly osobn´ı zkuˇsenosti s dan´ ymi programovac´ımi jazyky. Nejvˇetˇs´ı zkuˇsenosti m´ am s programovac´ım jazykem Java, o ˇr´ad menˇs´ı potom s PHP a JavaScriptem. Pro Javu jsem se rozhodl z nˇekolika dalˇs´ıch d˚ uvod˚ u. Jedn´ım z rozhoduj´ıc´ıch faktor˚ u byla moˇznost st´ ahnout kompletn´ı software developement kit (SDK) pro Javu vˇcetnˇe dokumentace. Dalˇs´ı v´ yhodou Javy oproti PHP ˇci JavaScriptu je fakt, ˇze pro bˇeh aplikace nen´ı nutn´e m´ıt nainstalovan´ y a funkˇcn´ı aplikaˇcn´ı server. V neposledn´ı ˇradˇe Java nab´ız´ı moˇznost vytvoˇren´ı spustiteln´eho jar archivu. K v´ yvoji programu je ovˇsem potˇreba m´ıt nainstalovan´e JDK[11] ve verzi 1.6 update 3 nebo vyˇsˇs´ı, ke spuˇstˇen´ı pak JRE[11] a pochopitelnˇe vlastnit zaˇr´ızen´ı pˇripojen´e k internetu.
3.2
Pouˇ zit´ e prostˇ red´ı pro tvorbu
Vzhledem k podm´ınce fungov´an´ı programu v linuxov´em prostˇred´ı jsem se rozhodl implementovat v Ubuntu 9.10 the Karmic Koala. Jako IDE jsem si vybral Eclipse 3.5 SR2, kter´e dostateˇcnˇe vyhovuje poˇzadavk˚ um pro v´ yvoj, testov´an´ı i bˇeh programu.
2
Doporuˇcuji se registrovat, z´ısk´ ate t´ım automaticky vygenerovan´ a ID a tokeny potˇrebn´e pro testov´ an´ı a bˇeh aplikace
10
´ ´ ˇ SEN ˇ ´I KAPITOLA 3. ANALYZA A NAVRH RE
Kapitola 4
Realizace V t´eto kapitole se zamˇeˇr´ım na popis implementace se zamˇeˇren´ım na nestandardn´ı ˇc´ asti ˇreˇsen´ı, ponˇevadˇz aplikace je rozs´ ahl´a a pˇrijde mi nevhodn´e popisovat ˇreknˇeme standardn´ı“ ” souˇc´asti programu jako napˇr. GUI nebo vysvˇetlovat rozˇs´ıˇren´e funkce programu oproti zad´ an´ı, ´ kter´e jsem se dobrovolnˇe rozhodl implementovat. D´ale odkazuji do kapitoly Uvod konkr´etnˇe do bodu 1.2 Princip online aukce na vysvˇetlen´ı typ˚ u aukc´ı eBay a jejich moˇzn´ ymi kombinacemi, nebot’ jsou tyto informace nezbytn´e pro pochopen´ı samotn´eho k´odu a pouˇzit´ ych v´ yraz˚ u v t´eto kapitole.
4.1
Implementace vyuˇ z´ıvaj´ıc´ı eBay API
Program je navrˇzen s vyuˇzit´ım eBay API, v dobˇe psan´ı tohoto textu v posledn´ı verzi 665. eBay API se skl´ ad´ a z nˇekolika d´ılˇc´ıch API, kter´e spravuj´ı svou urˇcitou oblast, pracuj´ı na r˚ uzn´ ych protokolech a podporuj´ı r˚ uzn´e form´aty dat. eBay oznaˇcuje mnoˇzinu podporovan´ ych API jako eBay Web Services. Tato mnoˇzina se potom dˇel´ı do pˇeti podmnoˇzin, jimiˇz jsou Search, Selling, Buying, Users a Alerts. Jednotliv´e podmnoˇziny pak obsahuj´ı konkr´etn´ı API. Pro pˇredstavu uvedu nˇekter´e z nich spadaj´ıc´ı do v´ yˇse zm´ınˇen´ ych skupin. V podmnoˇzinˇe Search je to napˇr. • Finding API umoˇzn ˇuj´ıc´ı vyhled´avat poloˇzky na eBay, v Selling: • Trading API zajiˇst’uj´ıc´ı autentizovan´ y pˇr´ıstup k soukrom´ ym dat˚ um na eBay a spravuj´ıc´ı prodejn´ı management, • Research API zprostˇredkov´avaj´ıc´ı historick´e informace o eBay, v Buying: • Shopping API, kter´e slouˇz´ı na vyhled´av´an´ı produkt˚ u, ovˇsem na rozd´ıl od Finding API je optimalizov´ an na rychlost, pouˇzitelnost a menˇs´ı objem pˇren´aˇsen´ ych dat pro pˇr´ıstup k veˇrejn´ ym read-only dat˚ um na eBay ve svˇetˇe Web 2.0,
11
12
KAPITOLA 4. REALIZACE
v Users: • Feedback API poskytuj´ıc´ı spr´ avu uˇzivatelsk´ ych u ´ˇct˚ u a v Alerts: • Server Notification API poskytuj´ıc´ı serverov´e ozn´amen´ı vhodn´e pro aplikace serverov´eho typu, jenˇz mohou tˇemto notifikac´ım z eBay naslouchat. Pro komunikaci s eBay API se vyuˇz´ıv´ a protokol HTTP (kromˇe Trading API, kde se vyuˇz´ıv´a zabezpeˇcen´ y HTTPS protokol v poˇzadavku POST) v poˇzadavc´ıch GET(REST[17]) a POST. Pro form´at dat se vyuˇz´ıv´ a XML, SOAP[19] a JSON[12]. Protoˇze jednotliv´e API jsou znaˇcnˇe rozs´ahl´e a vydaly by na celou knihu, jsou pops´any detailnˇeji pouze ty, kter´e jsou v aplikaci prakticky vyuˇzity a pro z´ısk´an´ı dalˇs´ıch informac´ı odkazuji[1] na detailn´ı popis a dokumentaci k jednotliv´ ym API na internetov´ ych str´ank´ach eBay Developers Programu.
4.2
Pˇ rihl´ aˇ sen´ı do syst´ emu
Cel´ y program pracuje jako celek a autentizuje se v˚ uˇci eBay Trading Web Services zabezpeˇcen´ ym HTTPS protokolem. Tud´ıˇz je zapotˇreb´ı m´ıt registrovan´ yu ´ˇcet na eBay, ale tak´e v eBay ´ Developers Programu, jejichˇz u ´ˇcty jsou vz´ajemnˇe propojeny. Uˇcet v eBay Developers Programu poskytuje DeveloperID, ApplicationID, CetrificateID na z´akladˇe nichˇz se vygeneruje eBay token. Ten je n´ aslednˇe pouˇzit pro veˇskerou dalˇs´ı komunikaci a m´a ˇcasovˇe omezenou dobu trv´an´ı, ˇr´adovˇe asi rok. Vˇsechny tyto identifikaˇcn´ı u ´daje lze tak´e plnˇe vyuˇz´ıt pro pˇripojen´ı do testovac´ıho prostˇred´ı eBay Developers Program Sandbox, kde je moˇzno virtu´alnˇe spravovat sv˚ uj mini“ eBay. Podle toho se liˇs´ı i pˇrihlaˇsovac´ı u ´daje, viz Dodatek B. Pokud byla ” v´ıcekr´at zad´ana ˇspatn´ a kombinace pˇrihlaˇsovac´ıho jm´ena a hesla, m˚ uˇze se server dot´azat na tzv. CAPTCHA. T´ım se snaˇz´ı pˇredch´azet slovn´ıkov´emu u ´toku. N´asleduj´ıc´ı u ´sek k´odu popisuje pˇrihl´aˇsen´ı na eBay: ApiContext apiContext = new ApiContext(); ApiCredential apiCred = new ApiCredential(); this.apiContext.setApiCredential(apiCred); ApiAccount account = new ApiAccount(); this.apiCred.setApiAccount(account); ApiLogging apiLogging = new ApiLogging(); this.apiContext.setApiLogging(apiLogging); this.apiContext.setApiServerUrl("apiServerURL"); this.apiContext.setEpsServerUrl("epsServerURL"); this.apiContext.setSignInUrl("signInURL");
ˇ ´ SEN ˇ ´I DO SYSTEMU ´ 4.2. PRIHL A
13
this.account.setDeveloper("developerID"); this.account.setApplication("applicationID"); this.account.setCertificate("certificateID"); this.apiCred.seteBayToken("token"); Ve skuteˇcnosti t´ımto zp˚ usobem neprob´ıh´a ˇz´adn´e pˇrihlaˇsov´an´ı. Pouze se do promˇenn´e apiContext nastavuj´ı veˇsker´e pˇrihlaˇsovac´ı u ´daje a adresy. Promˇenn´a apiContext se pouˇz´ıv´ a pro vˇsechnu komunikaci se serverem. API pak d´ale zajist´ı zvolen´ı n´azvu sluˇzby, ke kter´e pˇristupujeme. Vlastn´ı autorizace je provedena pˇri prvn´ı komunikaci se serverem, odpad´a tak nutnost autorizov´ an´ı se pˇri kaˇzd´e v´ ymˇenˇe dat.
Obr´ azek 4.1: Model nasazen´ı pˇrihazovac´ıho programu
Na obr´ azku 4.1 se nach´ az´ı zjednoduˇsen´ y model nasazen´ı. Zjednoduˇsen´ y proto, ˇze se na nˇem nevyskytuj´ı vˇsechny API, s kter´ ymi program komunikuje, ale pouze ty nejpouˇz´ıvanˇejˇs´ı. Je tomu tak z d˚ uvodu pˇrehlednosti a n´azornosti, ponˇevadˇz se vˇsemi ostatn´ımi API komunikuje takt´eˇz pˇres HTTP protokol.
4.2.1
Struktura XML
Program ukl´ ad´ a pˇrihlaˇsovac´ı u ´daje do souboru ve form´atu XML, jehoˇz stromov´a struktura je zobrazena n´ıˇze. Tˇr´ıda StringEncrypter zaˇsifrov´av´a hodnoty uzl˚ u Developer, Application, Certificate a Token, pˇriˇcemˇz ostatn´ı poloˇzky ˇsifrov´any nejsou. Pouˇzit je open source algoritmus Base64 s veˇrejn´ ym kl´ıˇcem a 8 bytovou sol´ı, kter´ y m´a tu v´ yhodu, ˇze v´ ysledn´ y zak´odovan´ y ˇretˇezec se skl´ ad´ a z tisknuteln´ ych znak˚ u ASCII, a proto jej mohu zapsat do XML souboru. Pˇri nahr´ av´ an´ı pˇrihlaˇsovac´ıch u ´daj˚ u jsou dan´e poloˇzky zpˇet deˇsifrov´any.
14
KAPITOLA 4. REALIZACE
Stromov´ a struktura XML souboru:
<ServerUrl>https://api.ebay.com/wsapi <EpsServerUrl>https://api.ebay.com/ws/api.dll <SignInUrl>https://signin.ebay.com/ws/eBayISAPI.dll?SignIn <ApiCredential> <Application/> <eBayCredential> <Username/> <Password/>
Cel´ y proces uloˇzen´ı pˇrihlaˇsovac´ıch u ´daj˚ u do XML souboru je n´azornˇe pops´an sekvenˇcn´ım diagramem (Obr´ azek 4.2). Uˇzivatel se rozhodne uloˇzit sv´e u ´daje, vybere si absolutn´ı cestu, kam je chce uloˇzit, urˇc´ı n´ azev souboru a stiskne tlaˇc´ıtko v GUI. To vyvol´a akci, v n´ıˇz tˇr´ıda Saver1 nasetuje uˇzivatelem zadan´e pˇrihlaˇsovac´ı u ´daje do promˇenn´ ych a pˇred´a je tˇr´ıdˇe StringEncrypt k zaˇsifrov´ an´ı. Zaˇsifrovan´e u ´daje jsou pˇred´any tˇr´ıdˇe XML Builder, kter´a vytvoˇr´ı v´ yˇse zm´ınˇen´ y stromov´ y model XML souboru a zap´ıˇse do nˇeho zaˇsifrovan´e hodnoty. Takto vytvoˇren´ y model je uloˇzen do XML souboru se zvolen´ ym n´azvem a absolutn´ı cestou. Nakonec je uˇzivatel informov´ an o probˇehnut´e akci zobrazen´ım dialogov´eho okna v GUI. Naˇcten´ı pˇrihlaˇsovac´ıch u ´daj˚ u ze souboru funguje analogicky.
1
N´ azvy tˇr´ıd nekoresponduj´ı pˇresnˇe s n´ azvy tˇr´ıd v implementaci z d˚ uvodu pˇrehlednosti a n´ azornosti diagramu.
´ ´I INFORMAC´I O POLOZCE ˇ 4.3. Z´ISKAN NA EBAY
15
Obr´ azek 4.2: Sekvenˇcn´ı diagram uloˇzen´ı pˇrihlaˇsovac´ıch u ´daj˚ u do XML souboru
4.3
Z´ısk´ an´ı informac´ı o poloˇ zce na eBay
Po pˇrihl´ aˇsen´ı a v´ ybˇeru akce z hlavn´ıho menu je v pˇrev´aˇzn´e vˇetˇsinˇe nutn´e zadat item ID dan´e poloˇzky, o n´ıˇz chce uˇzivatel zjistit urˇcit´e informace. Proto je vhodn´e vˇedˇet, kde je moˇzn´e item ID nal´ezt a jak s n´ım program d´ale pracuje. Item ID je jednoznaˇcn´ y identifik´ator poloˇzky na eBay oznaˇcen´ y jako Item number, coˇz je dvan´actim´ıstn´e ˇc´ıslo. Toto ˇc´ıslo je zobrazeno u kaˇzd´e aukce na eBay, viz Obr´ azek 4.3 zakrouˇzkov´ano ˇcervenˇe. Po zad´ an´ı spr´ avn´eho item ID program zobraz´ı informace o dan´e poloˇzce. K z´ısk´an´ı dat se vyuˇz´ıv´ a tˇr´ıda z eBay Trading API GetItemCall, kter´e se do konstruktoru pˇred´a apiContext. Metoda t´eto tˇr´ıdy getItem(itemID) vrac´ı data v objektu typu ItemType. K takto z´ıskan´ ym dat˚ um lze pˇristupovat vol´ an´ım jednotliv´ ych get metod, jak je zˇrejm´e z n´asleduj´ıc´ıho u ´seku k´odu. Z´ıskan´e hodnoty se potom zobraz´ı v jednotliv´ ych textboxech pˇr´ıpadnˇe tabulk´ach v GUI aplikace. ApiContext apiContext = new ApiContext(); GetItemCall api = new GetItemCall(apiContext); String itemID = txtItemId.getText(); ItemType item = api.getItem(itemID); item.getTitle(); item.getSellingStatus().getCurrentPrice().getValue()).toString()); item.getQuantity().toString(); item.getPrimaryCategory().getCategoryID();
16
KAPITOLA 4. REALIZACE
Obr´ azek 4.3: Z´ısk´ an´ı tzv. Item number u poloˇzky na eBay
4.4
Pˇ rihozen´ı
Podle zadan´eho item ID program rozhodne, o jak´ y typ aukce se u dan´e poloˇzky jedn´a t´ım, ˇze se zavol´a metoda z eBay Trading API getListingType().value(), kter´a do promˇenn´e typu String auktionType uloˇz´ı hodnotu typu aukce. String auctionType = item.getListingType().value(); Metoda getListingType().value() vrac´ı tyto hodnoty: • Chinese pro pˇrihazovac´ı“ typ aukce ” • FixedPriceItem pro aukce typu Buy It Now Pro zjiˇstˇen´ı, zda dan´ a aukce nab´ız´ı moˇznost vytvoˇrit vlastn´ı nab´ıdku, tzv. BestOffer, slouˇz´ı metoda getBestOfferDetails(), kter´a do objektu tˇr´ıdy BestOfferDeatilsType uloˇz´ı informace ohlednˇe BestOffer aukci nebo null. Pokud objekt nen´ı null, zavol´a se metoda isBestOfferEnabled(), kter´ a do promˇenn´e typu String bestOffer uloˇz´ı hodnotu "Yes" v pˇr´ıpadˇe, ˇze aukce podporuje BestOffer. V opaˇcn´em pˇr´ıpadˇe je v promˇenn´e uloˇzena hodnota "No".
ˇ ´I 4.4. PRIHOZEN
17
BestOfferDetailsType bod = item.getBestOfferDetails(); String bestOffer = "No"; if (bod != null) { bestOffer = Utils.booleanToYesNo(bod.isBestOfferEnabled()); } Aplikace t´ımto zp˚ usobem zjist´ı, o jakou aukci pˇr´ıpadnˇe kombinaci typ˚ u aukc´ı se jedn´ a 2 a zpˇr´ıstupn´ı uˇzivateli dalˇs´ı moˇznosti resp. tlaˇc´ıtka, co lze s aukc´ı prov´est a nastav´ı tak´e omezen´ı na fin´ aln´ı cenu a kvantitu, kdy pro Snipe mus´ı b´ yt nastavena v´ yˇse fin´aln´ı ˇc´astky vˇetˇs´ı, neˇz je ta souˇcasn´ a, pro Buy It Now mus´ı b´ yt nastaven´a pˇresnˇe Buy It Now Price ˇc´astka zjiˇstˇen´ a pro danou poloˇzku a v Best Offer z´aleˇz´ı na uˇzivateli, jakou ˇc´astku nab´ıdne. Kvantita mus´ı b´ yt celoˇc´ıseln´ a a vˇzdy menˇs´ı nebo rovna kvantitˇe dan´eho zboˇz´ı na eBay.
Obr´ azek 4.4: Okno zobrazuj´ıc´ı pˇrihazovac´ı menu 2
N´ azvy tlaˇc´ıtek koresponduj´ı s n´ azvy typ˚ u aukc´ı v anglick´e verzi eBay, tedy Buy It Now, Best Offer a pro Chinese aukci je to tlaˇc´ıtko Snipe.
18
KAPITOLA 4. REALIZACE
Tlaˇc´ıtkem Get IP se program pokus´ı z´ıskat IP adresu poˇc´ıtaˇce, na nˇemˇz je spuˇstˇen. IP adresa se zjiˇst’uje posl´ an´ım POST poˇzadavku na internetovou str´anku whatismyip.com, uloˇzenou v promˇenn´e strUrl, metodou executeMethod(post). Metoda getResponseBodyAs String() vrac´ı odpovˇed’ na poˇzadavek, tedy pokud vˇse probˇehne bez chyb, IP adresu ve form´atu String. V pˇr´ıpadˇe chyby se zachyt´ı v´ yjimka. Metoda releaseConnection() nakonec uvoln´ı“ spojen´ı. ” String strURL = "http://whatismyip.com/automation/n09230945NL.asp"; PostMethod post = new PostMethod(strURL); HttpClient httpclient = new HttpClient(); try { httpclient.executeMethod(post); this.txtIP.setText(post.getResponseBodyAsString()); } catch (Exception ex) { loger.log(Priority.ERROR, ex); } finally { post.releaseConnection(); } Pokud se nepodaˇr´ı z´ıskat IP adresu, je nutn´e, aby ji uˇzivatel zadal ruˇcnˇe. V tomto pˇr´ıpadˇe je kontrolov´ ana validita IP adresy metodou validateIpAdress(String), kter´e se jako parametr pˇred´ a promˇenn´ a typu String - ona IP adresa, a kter´a metodou matches() porovn´a podle regul´ arn´ıho v´ yrazu vstupn´ı IP adresu a vyhodnot´ı jej´ı validitu. Regul´arn´ı v´ yraz kontroluje, zda se mezi tˇremi teˇckami nach´az´ı minim´alnˇe jedna, maxim´alnˇe tˇri celoˇc´ıseln´e hodnoty v uzavˇren´em intervalu nula aˇz devˇet. private boolean validateIpAddress(String iPaddress) { final Pattern IP_PATTERN = Pattern.compile("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}"); return IP_PATTERN.matcher(iPaddress.trim()).matches(); } Takto zadan´e u ´daje jsou pˇripraveny ke zpracov´an´ı, tedy pˇrihozen´ı 4.4.1, koupi 4.4.2 nebo vytvoˇren´ı nejlepˇs´ı nab´ıdky 4.4.3.
4.4.1 4.4.1.1
Klasick´ a pˇ rihazovac´ı aukce Vytvoˇ ren´ı nab´ıdky a pˇ rihozen´ı
Pˇred samotn´ ym pˇrihozen´ım je nutn´e vytvoˇrit nab´ıdku. K tomu slouˇz´ı objekt offer tˇr´ıdy OfferType, kter´emu se nastav´ı tˇri hodnoty. Tˇemi jsou ˇc´astka, kter´a m´a b´ yt pˇrihozena, kvanˇ tita zboˇz´ı, kter´e chceme koupit a typ aukce. C´astku i kvantitu urˇcil uˇzivatel, proto se metodami offer.setMaxBid(amount) respektive offer.setQuantity(item.getFinalQuantity())
ˇ ´I 4.4. PRIHOZEN
19
z´ısk´a, pˇriˇcemˇz ˇc´ astka nen´ı typu Integer nebo Double, jak by se mohl ˇcten´aˇr domn´ıvat, ale obaluje ji tˇr´ıda AmountType. Objektu amount t´eto tˇr´ıdy mus´ı b´ yt nastavena mˇena stejn´a, jako je mˇena kupovan´e poloˇzky, coˇz se zaruˇc´ı metodami amount.setCurrencyID(item.getCurren cy()). Pro dokonˇcen´ı nastaven´ı nab´ıdky je nutn´e specifikovat typ aukce metodou offer.set Action(BidActionCodeType.BID). V tomto pˇr´ıpadˇe konstanta BID urˇcuje klasickou pˇrihazovac´ı aukci neboli Chinese auction. Nyn´ı je vytvoˇrena nab´ıdka. D´ale je vˇsak nutn´e vytvoˇrit poˇzadavek pˇrihozen´ı. K tomu slouˇz´ı tˇr´ıda z eBay Trading API PlaceOfferCall, kter´e se jako parametr do konstruktoru pˇred´ a nˇekolikr´ at zm´ınˇen´ y apiContext. Objektu pf tˇr´ıdy PlaceOfferCall se nastav´ı metodou pf.setItemID(String.valueOf(item.getItemId())) item ID poloˇzky a metodou pf.setEndUserIP(item.getIpAddress()) IP adresa koncov´eho zaˇr´ızen´ı. Metoda pf.setBlo ckOnWarning(false) urˇcuje, zda se pˇri varov´an´ı m´a - hodnota true nebo nem´a - hodnota false blokovat posl´ an´ı nab´ıdky. Nakonec se poˇzadavek pˇrihozen´ı odeˇsle metodou pf.placeOf fer(). AmountType amount = new AmountType(); amount.setCurrencyID(item.getCurrency()); amount.setValue(item.getFinalPrice().doubleValue()); OfferType offer = new OfferType(); offer.setMaxBid(amount); offer.setQuantity(item.getFinalQuantity()); offer.setAction(BidActionCodeType.BID); PlaceOfferCall pf = new PlaceOfferCall(item.getApiContex()); pf.setBlockOnWarning(false); pf.setItemID(String.valueOf(item.getItemId())); pf.setOffer(offer); pf.setEndUserIP(item.getIpAddress()); pf.placeOffer(); 4.4.1.2
Monitorov´ an´ı aukc´ı
Dle zad´ an´ı m´ a program monitorovat v´ıce aukc´ı souˇcasnˇe a pˇrihodit zadanou ˇc´astku v posledn´ıch pˇeti vteˇrin´ ach pˇred koncem aukce. Jak je toho doc´ıleno, bude pops´ano v t´eto podkapitole. Z´ akladem je synchronizovan´a kolekce tasks, kter´a obsahuje veˇsker´a data o monitorovan´ ych aukc´ıch. Synchronizovan´a je proto, aby jej´ı operace prob´ıhaly atomicky. Samotn´e monitorov´ an´ı prob´ıh´a ve vl´aknˇe, kter´e bˇeˇz´ı v nekoneˇcn´em while cyklu. Vl´ akno je metodou Thread.sleep(1000) po vteˇrinˇe usp´av´ano, pˇriˇcemˇz s kaˇzdou uplynuvˇs´ı vteˇrinou se zv´ yˇs´ı o jedniˇcku promˇenn´ a counter typu long. Podle hodnoty t´eto promˇenn´e doch´ az´ı k pravideln´ ym aktualizac´ım dat monitorovan´ ych poloˇzek co dvˇe minuty, coˇz zajiˇst’uje podm´ınka if (counter % 120 == 0) a vytvoˇren´ı nov´eho vl´akna new RefreshThread(tasks.get(i)). start(), kter´e automaticky z´ısk´ a a uloˇz´ı aktu´aln´ı data o vˇsech poloˇzk´ach v kolekci3 . Podm´ınka if(counter == Long.MAX VALUE) slouˇz´ı k oˇsetˇren´ı situace, ˇze dojde k pˇreteˇcen´ı rozsahu typu Long. 3
Z´ısk´ an´ı dat o poloˇzce bylo pops´ ano v kapitole 4.3.
20
KAPITOLA 4. REALIZACE
4.4.1.3
Vyhodnocen´ı ˇ casu pˇ rihozen´ı
Pro vˇsechny prvky kolekce se zjist´ı pˇresn´e datum konce aukce s pˇeti sekundov´ ym pˇredstihem metodou new Date(tasks.get(i).getEndTime().getTime() - 5000), kter´a ho uloˇz´ı do ˇ konce aukce je v podm´ınce if(endDate.before(date) nov´eho objektu endDate typu Date. Cas && tasks.get(i).isFinished() == false) porovn´av´an s aktu´aln´ım ˇcasem. Pokud je podm´ınka splnˇena, oznaˇc´ı se aukce metodou tasks.get(i).setFinished(true) jako skonˇcen´a, aby neprobˇehlo opˇetovn´e pˇrihozen´ı a v podm´ınce if(tasks.get(i).getFinalPrice().compa reTo(tasks.get(i).getCurrentPrice()) == 1) se vyhodnocuje, zda nastaven´a fin´aln´ı hodnota ceny pˇr´ıhozu je vˇetˇs´ı neˇz aktu´ aln´ı cena poloˇzky. Pokud ano, vytvoˇr´ı se nov´e vl´akno new SnipeThread(tasks.get(i)).start(), kter´e provede pˇrihozen´ı, dle nastaven´ ych parametr˚ u. Pokud nen´ı splnˇena podm´ınka, nen´ı uˇzivatel nijak upozornˇen, ˇze program nepˇrihodil a to proto, at’ nen´ı obtˇeˇzov´ an vyskakuj´ıc´ımi okny apod. Pouh´ ym zkontrolov´an´ım v´ ysledku aukce pozn´a, ˇze fin´aln´ı hodnota ˇc´ astky pˇrihozen´ı je vyˇsˇs´ı, neˇz byla j´ım nastaven´a hodnota, tud´ıˇz nebylo moˇzn´e aukci vyhr´ at. private static List<SnipeTask> tasks = Collections.synchronizedList(new LinkedList<SnipeTask>()); private long counter = 0; public void run() { while (true) { for (int i = 0; i < tasks.size(); i++) { Date endDate = new Date(tasks.get(i).getEndTime().getTime() - 5000); Date date = new Date(); if (endDate.before(date) && tasks.get(i).isFinished() == false) { tasks.get(i).setFinished(true); if (tasks.get(i).getFinalPrice().compareTo(tasks.get(i). getCurrentPrice()) == 1) new SnipeThread(tasks.get(i)).start(); } else { if (counter % 120 == 0) new RefreshThread(tasks.get(i)).start(); } } tasks.removeAll(toDelete); try { Thread.sleep(1000); counter++; if(counter == Long.MAX_VALUE) counter = 0; } } }
ˇ ´I 4.4. PRIHOZEN
4.4.1.4
21
Zruˇ sen´ı monitorovan´ e aukce
Aby nedoch´ azelo k ˇcasovˇe z´ avisl´ ym chyb´am, je poloˇzka, kterou chce uˇzivatel smazat z monitorovan´ ych aukc´ı, nejdˇr´ıve pˇrid´ana metodou toDelete.add(tasks.get(index)) do kolekce toDelete a aˇz mimo for cyklus zm´ınˇen´ y v´ yˇse smaz´ana metodou tasks.removeAll(to Delete). Pokud by se ono maz´ an´ı poloˇzky vyskytovalo uvnitˇr for cyklu, doˇslo by k n´ ahl´e zmˇenˇe hodnoty tasks.size() omezuj´ıc´ı poˇcet iterac´ı cyklu a nastala by v´ yjimka. private static List<SnipeTask> toDelete = new ArrayList<SnipeTask>(); public void removeFromTasksList(int index) { toDelete.add(tasks.get(index)); } 4.4.1.5
N´ azorn´ y popis cel´ eho procesu pˇ rihozen´ı
Jak prob´ıh´ a cel´ y postup od spuˇstˇen´ı aplikace aˇz po pˇrihozen´ı ˇc´astky popisuje iterativnˇe obr´ azek 4.5. Po pˇrihl´ aˇsen´ı uˇzivatele se zjist´ı informace o poloˇzce, vytvoˇr´ı se nab´ıdka zad´an´ım hodnoty ceny, kter´ a m´ a b´ yt pˇrihozena. Pokud je vˇse nastaven´e spr´avnˇe, dojde k potvrzen´ı nab´ıdky a jej´ımu pˇrihozen´ı. Pokud pˇrihozen´ı probˇehlo bez chyb, ozn´am´ı se nejvyˇsˇs´ı pˇrihazuj´ıc´ı.
Obr´ azek 4.5: Bussiness model pˇrihozen´ı
22
KAPITOLA 4. REALIZACE
4.4.2
Koupˇ e poloˇ zky za fixn´ı cenu
Koupˇe poloˇzky za fixn´ı cenu se oproti klasick´e pˇrihazovac´ı aukci liˇs´ı pochopitelnˇe v typu nastaven´e aukce. V tomto pˇr´ıpadˇe je potˇreba zmˇenit BidActionCodeType na PURCHASE. D´ale se mus´ı nastavit pˇresnˇe urˇcen´ a hodnota ceny Buy It Now poloˇzky na eBay. Metodami amount.setValue(item.getBuyItNowPrice()) se do objektu amount tˇr´ıdy AmountType uloˇz´ı hodnota t´eto ceny, aby se n´ aslednˇe mohla vytvoˇrit nab´ıdka metodou setMaxBid(amount). Nastaven´ı IP adresy, mˇeny, kvantity a ID kupovan´e poloˇzky z˚ ust´av´a stejn´e jako v pˇr´ıpadˇe klasick´e pˇrihazovac´ı aukce. offer.setAction(BidActionCodeType.PURCHASE); AmountType amount = new AmountType(); amount.setValue(item.getBuyItNowPrice()); OfferType offer = new OfferType(); offer.setMaxBid(amount);
4.4.3
Posl´ an´ı nejlepˇ s´ı nab´ıdky
Vytvoˇren´ı nejlepˇs´ı nab´ıdky se oproti koupi poloˇzky za fixn´ı cenu liˇs´ı pochopitelnˇe v typu nastaven´e aukce. V tomto pˇr´ıpadˇe je potˇreba nastavit BidActionCodeType na OFFER. Nastaven´ı ostatn´ıch hodnot je stejn´e. offer.setAction(BidActionCodeType.OFFER);
4.5
Posl´ an´ı poˇ zadavku PlaceOffer
EBay Developers Program poskytuje na sv´ ych str´ank´ach testovac´ı prostˇred´ı eBay API tzv. API Test Tool[20], kde je developer˚ um umoˇznˇeno testovat jednotliv´a API a jejich metody a to jak pro sandbox tak i pro produkˇcn´ı verzi eBay. Pr´ace s tˇr´ıdou PlaceOffer, kter´a se star´a o vytvoˇren´ı a pˇrihozen´ı nab´ıdky, uˇz byla pops´ana v kapitole 4.4. Nyn´ı bude vysvˇetleno, jak prob´ıh´a komunikace. C´ılov´ y poˇc´ıtaˇc4 pos´ıl´a HTTP POST poˇzadavek eBay serveru. HTTP poˇzadavek ze skl´ ad´ a z HTTP hlaviˇcky a tˇela v XML form´atu (onˇech vytvoˇren´ ych dat).
4.5.1
Struktura HTTP hlaviˇ cky
HTTP hlaviˇcka se skl´ ad´ a z atribut˚ u X-EBAY-API-COMPATIBILITY-LEVEL oznaˇcuj´ıc´ı verzi eBay API, X-EBAY-API-DEV-NAME, X-EBAY-API-APP-NAME a X-EBAY-API-CERT-NAME, kter´e obsahuj´ı Developer ID, Application ID a Certificate ID, X-EBAY-API-SITEID ud´avaj´ıc´ı k´od st´atu5 a atribut X-EBAY-API-CALL-NAME, kter´ y urˇcuje n´azev poˇzadavku. 4 5
C´ılov´ ym poˇc´ıtaˇcem je myˇsleno koncov´e zaˇr´ızen´ı uˇzivatele. V uk´ azce je hodnota 0, kter´ a oznaˇcuje str´ anky eBay n´ aleˇzej´ıc´ı Spojen´ ym st´ at˚ um americk´ ym.
´ ´I POZADAVKU ˇ 4.5. POSLAN PLACEOFFER
23
X-EBAY-API-COMPATIBILITY-LEVEL:665 X-EBAY-API-DEV-NAME:a83980e8-72b0-4ec5-9c04-f20accc48e8d X-EBAY-API-APP-NAME:Ccece4dc5-8cb1-4a1a-80a6-a7ac622be0e X-EBAY-API-CERT-NAME:066d0133-0ae9-4144-8e07-f509b800068c X-EBAY-API-SITEID:0 X-EBAY-API-CALL-NAME:PlaceOffer
4.5.2
Struktura XML poˇ zadavku
Tˇelo HTTP poˇzadavku obsahuje XML data. Jak si m˚ uˇze pozorn´ y ˇcten´aˇr vˇsimnout, jsou to pr´avˇe ta data, jejichˇz vytvoˇren´ı bylo pops´ano v kapitole 4.4. Uzel RequesterCredentials respektive jeho potomek eBayAuthToken obsahuje token uˇzivatele. Zde je vidˇet, ˇze k datov´e komunikaci staˇc´ı opravdu pouze token a nen´ı nutn´e se znovu autorizovat v˚ uˇci eBay serveru, jak jiˇz bylo zm´ınˇeno v kapitole 4.2. Uzel Offer tedy jeho potomci obsahuj´ı data vztahuj´ıc´ı se ke konkr´etn´ımu poˇzadavku pˇr´ıhozu6 . Hodnota v uzlu Action urˇcuje druh aukce podle tˇechto kl´ıˇcov´ ych slov: Bid|Purchase|Accept|Counter|Decline|Offer. V uzlu MaxBid je nastavena hodnota ˇc´ astky pˇrihozen´ı, v uzlu Quantity pak kvantita kupovan´eho zboˇz´ı. Uzel UserConsent obsahuje kl´ıˇcov´a slova true|false, kter´e v pˇr´ıpadˇe, ˇze dan´a poloˇzka vyˇzaduje potvrzen´ı licenˇcn´ıch pr´av, popisuj´ı, zda s nimi uˇzivatel souhlas´ı ˇci nikoliv. Uzel Message umoˇzn ˇuje poslat zpr´ avu prodejci ve form´atu String. Pokud aukce podporuje i vytvoˇren´ı nejlepˇs´ı nab´ıdky, m˚ uˇze se v poˇzadavku vyskytnout uzel BestOfferID, oznaˇcuj´ıc´ı ID t´eto nab´ıdky. Posledn´ı zm´ınˇen´e tˇri uzly jsou pouze voliteln´e, zat´ımco vˇsechny ostatn´ı jsou vyˇzadov´ any. Uzel ItemID nese informaci o ID poloˇzky a uzel EndUserIP obsahuje IP adresu c´ılov´eho zaˇr´ızen´ı.
<eBayAuthToken> Bid|Purchase|Accept|Counter|Decline|Offer <MaxBid> AmountType int <UserConsent> boolean <Message> string <EndUserIP> string Na konkr´etn´ı poˇzadavek v pˇr´ıpadˇe, ˇze nenastane chyba, poˇsle API n´asleduj´ıc´ı odpovˇed’. Ou ´spˇechu komunikace informuje uzel Ack svoj´ı hodnotou Success. Uzel Timestamp infor6
Za pˇrihozen´ı se povaˇzuje i koupˇe poloˇzky za fixn´ı cenu a vytvoˇren´ı nejlepˇs´ı nab´ıdky. Nen´ı to sice pˇrihazov´ an´ı v prav´em slova smyslu, ale jedn´ a se o jednor´ azov´e pˇrihozen´ı.
24
KAPITOLA 4. REALIZACE
muje o ˇcasu posl´ an´ı odpovˇedi na poˇzadavek, uzly Version a Build oznaˇcuj´ı aktu´aln´ı verzi a v´ yvojov´e sestaven´ı API. Uzel SellingStatus informuje o stavu prodeje. Atributy uzl˚ u ConvertedCurrentPrice a CurrentPrice currencyID informuj´ı o druhu mˇeny a v´ yˇsi hodnoty souˇcasn´e ceny v aukci. Uzel HighBidder respektive jeho potomek UserID oznaˇcuje ID aktu´aln´ıho nejvyˇsˇs´ıho pˇrihazuj´ıc´ıho a uzel MinimumToBid ud´av´a minim´aln´ı hodnotu dalˇs´ıho pˇr´ıhozu v dan´e mˇenˇe.
<Timestamp>2010-05-22T23:53:28.571Z Success 665 <Build>E665_CORE_BUNDLED_11160767_R1 <UsageData>MTMyOTgxNjM3LzE0NzUxOw** <SellingStatus> 10.0 10.0 <UserID>testuser_ondras <MinimumToBid currencyID="USD">10.5 V pˇr´ıpadˇe chyby se v uzlu Ack vrac´ı hodnota Failure a uzel Errors s jeho potomky ShortMessage, LongMessage, ErrorCode, SeverityCode a ErrorClassification popisuje detailnˇe chybov´e hl´ aˇsen´ı.
Failure <Errors> <ShortMessage>Please specify a query!
Please specify a query! <ErrorCode>10.1 <SeverityCode>Error <ErrorClassification>RequestError Pro ucelen´ı poznatk˚ u o posl´ an´ı nab´ıdky a pr˚ ubˇehu komunikace c´ılov´eho poˇc´ıtaˇce s eBay Trading API odkazuji[14] na referenˇcn´ı pˇr´ıruˇcku.
Kapitola 5
Testov´ an´ı Celou aplikaci bylo nutn´e pokr´ yt jednotkov´ ymi testy a testy grafick´eho uˇzivatelsk´eho rozhran´ı. Pouze s t´ım jsem se vˇsak nespokojil a vytvoˇril jsem dotazn´ık, kter´ y jsem spoleˇcnˇe s programem rozeslal skupinˇe1 lid´ı k testov´an´ı. Spektrum osob, kter´e mou aplikaci testovalo, jsem se snaˇzil vybrat co nejˇsirˇs´ı. Od naprost´ ych laik˚ u, aˇz po kolegy znal´e softwarov´ ych technologi´ı, od mladˇs´ıch aˇz po osoby stˇredn´ıho vˇeku. Tuto metodu testov´an´ı jsem zvolil z d˚ uvodu objektivnosti a r˚ uzn´ ych n´arok˚ u jednotliv´ ych uˇzivatel˚ u a pak tak´e proto, abych mohl pruˇznˇe reagovat na opravu chyb, dodˇel´an´ı nedostatk˚ u apod.
5.1
Jednotkov´ e testy
Jednotkov´e neboli unit testy pokr´ yvaj´ı bussiness logiku programu. Testovat bussiness logiku eBay API je kontraproduktivn´ı, ponˇevadˇz souˇc´ast´ı zdroj˚ u jsou Perf testy a Sanity testy, kter´e pokr´ yvaj´ı cel´e eBay API. Testoval jsem proto pouze vlastn´ı k´od. Na pˇr´ıkladu uv´ad´ım unit test ˇsifrov´ an´ı, kdy v promˇenn´e encode je text, kter´ y se m´a zaˇsifrovat a v promˇenn´e expectedCorrectResult je oˇcek´avan´ y text po zaˇsifrov´an´ı. Na objektu tˇr´ıdy String Encrypter se zavol´ a metoda encrypt(String), kter´a m´a b´ yt t´ımto unit testem pokryta, a kter´e se pˇred´ a jako parametr obsah promˇenn´e encode, tedy text k zaˇsifrov´an´ı. Zaˇsifrovan´ y text se uloˇz´ı do promˇenn´e encrypted, kter´a se porovn´av´a v metodˇe assertEquals(String, String) na rovnost s promˇennou expectedCorrectResult, v n´ıˇz je oˇcek´avan´ y v´ ysledek po zaˇsifrov´ an´ı. @Test public void testEncrypt() { StringEncrypter encrypter = new StringEncrypter(); String encode = "123456abcdEFGH"; String expectedCorrectResult = "RSoGc1TNhZlfUO5ZxcKI6g=="; String encrypted = encrypter.encrypt(encode); assertEquals(encrypted, expectedCorrectResult); } 1
Skupinou zde rozum´ım 10 tester˚ u
25
´ ´I KAPITOLA 5. TESTOVAN
26
Uk´azka popisuje oˇcek´ avan´ y v´ ystup, ale d´ale se testuj´ı chybov´e stavy, nepovolen´e, mezn´ı, nedefinovan´e, minim´ aln´ı a maxim´ aln´ı hodnoty, pr´azdn´a a ne´ upln´a vstupn´ı data apod.
5.2
Testy grafick´ eho uˇ zivatelsk´ eho rozhran´ı
GUI testy, jak uˇz z jejich zkratky vypov´ıd´a, testuj´ı grafick´e uˇzivatelsk´e rozhran´ı programu. K tomuto u ´ˇcelu je pouˇzit framework UISpec4J[9], kter´ y napom´ah´a testov´an´ı GUI Java aplikac´ı zaloˇzen´ ych na Swingu2 .
5.2.1
Mockov´ an´ı objekt˚ u
Technika zvan´ a mockov´ an´ı objekt˚ u se snaˇz´ı ˇreˇsit z´avislost testovan´eho k´odu na ostatn´ım k´odu tak, ˇze z´ avislost je nahrazov´ ana modelov´ ymi implementacemi tzv. mock objekty. Tyto objekty jsou propojeny s testovan´ ym k´odem, a tak lze tento k´od testovat tzv. zevnitˇr. Nahrazen´ım z´avislosti mock objekty je zaruˇcena izolovanost testu v˚ uˇci ostatn´ımu k´odu. Ve tˇr´ıdˇe DialogGeteBayOfficialTimeCallMock se nach´az´ı metoda geteBayOfficialTi me(), kter´a vrac´ı instanci tˇr´ıdy typu Calendar. Instance tohoto objektu je pr´avˇe mock objektem, s kter´ ym se potom d´ ale pracuje. public class DialogGeteBayOfficialTimeCallMock extends GeteBayOfficialTimeCall { @Override public Calendar geteBayOfficialTime() throws Exception { return Calendar.getInstance(); } } V metodˇe testGeteBayOfficialTime() se testuje spr´avn´e zobrazen´ı z´ıskan´ ych dat, v tomto pˇr´ıpadˇe ofici´ aln´ıho ˇcasu eBay a v´ yskyt komponent knihovny Swing. Jelikoˇz ofici´aln´ı ˇcas eBay se neust´ ale mˇen´ı a u ´ˇcelem nen´ı testovat, zda spr´avnˇe funguje z´ısk´av´an´ı ˇcasu ze serveru eBay, je zde pouˇzit pr´ avˇe onen vytvoˇren´ y mock objekt, tedy instance tˇr´ıdy Calendar. T´ım se doc´ıl´ı pouze testov´ an´ı GUI, coˇz je v tomto pˇr´ıpadˇe poˇzadavkem. Vytvoˇr´ı se objekt mock, kter´ y je instanc´ı tˇr´ıdy DialogGeteBayOfficialTimeCallMock. Na tomto objektu se zavol´a v´ yˇse zm´ınˇen´ a metoda geteBayOfficialTime(), jej´ıˇz n´avratov´a hodnota se uloˇz´ı do promˇenn´e expected. Framework UISpec4J je vyuˇzit k testov´an´ı v´ yskytu grafick´ ych komponent Swingu. Testuje se, zda se na komponentˇe Panel vyskytuje komponenta TextBox, a komponenta Button s dan´ ym n´azvem. Komponentˇe TextBox se metodou setText(String) nastav´ı obsah promˇenn´e expected, coˇz se projev´ı zobrazen´ım z´ıskan´eho ˇcasu (mock objektu) v dan´e komponentˇe. Potom se zavol´a metoda getText(), kter´ a z´ısk´ a zobrazen´ y ˇcas a uloˇz´ı jej do promˇenn´e showed. Promˇenn´e expected a showed porovn´ ame metodou assertEquals(String, String) na rovnost a t´ım se zjist´ı, zda ˇcas, kter´ y byl pˇred´ an komponentˇe TextBox se zobrazil spr´avnˇe. 2
Knihovna Swing poskytuje aplikaˇcn´ı rozhran´ı pro tvorbu a obsluhu klasick´eho grafick´eho uˇzivatelsk´eho rozhran´ı na platformˇe Java.
´ TESTOVAN ´ ´I TESTERY 5.3. PRAKTICKE
27
public void testGeteBayOfficialTime() throws Exception { Frame frame = new Frame(); DialogGeteBayOfficialTime dE = new DialogGeteBayOfficialTime(frame, null, true); DialogGeteBayOfficialTimeCallMock mock = new DialogGeteBayOfficialTimeCallMock(); String expected = mock.geteBayOfficialTime().toString(); Panel p = new Panel(dE); TextBox t = p.getInputTextBox(); t.setText(expected); Button b = p.getButton("GeteBayOfficialTime"); String showed = t.getText(); assertEquals(showed, expected); }
5.3
Praktick´ e testov´ an´ı testery
Za nejd˚ uleˇzitˇejˇs´ı povaˇzuji praktick´e otestov´an´ı aplikace v re´aln´em provozu. Proto jsem sv˚ uj program uvolnil k veˇrejn´emu testovan´ı. S c´ılem z´ıskat co nejv´ıce relevantn´ıch dat a informac´ı, vytvoˇril jsem dotazn´ık, v nˇemˇz bylo poloˇzeno n´asleduj´ıc´ıch osm ot´azek: 1 Je instalaˇcn´ı a uˇzivatelsk´ y manu´al srozumiteln´ y? 2 Podaˇrilo se V´ am bez probl´em˚ u spustit program? 3 Pˇrihl´ asili jste se bez probl´emu pˇres program na eBay? 4 Je grafick´e uˇzivatelsk´e prostˇred´ı pˇrehledn´e a srozumiteln´e? 5 Funguje program spr´ avnˇe? Pokud ne, co je ˇspatnˇe? 6 Nastal nˇejak´ y probl´em bˇehem testov´an´ı? P´ad“ programu, zaseknut´ı“ apod.? ” ” 7 Pˇrihodil program fin´ aln´ı ˇca´stku ve spr´avn´ y ˇcas? 8 Nezatˇeˇzovala aplikace pˇr´ıliˇs poˇc´ıtaˇc? V implementaci programu je pouˇzita vlastn´ı konfigurace pluginu Apache Log4J, kter´ y slouˇz´ı k v´ ypisu chybov´ ych (i jin´ ych) hl´aˇsen´ı do souboru log4j.log. Vyˇz´adal jsem si proto tento soubor spolu s vyplnˇen´ ym dotazn´ıkem od jednotliv´ ych tester˚ u, abych mohl pˇresnˇe identifikovat a opravit chyby.
´ ´I KAPITOLA 5. TESTOVAN
28
5.3.1
V´ ysledky testov´ an´ı
V´ ysledky jsem zpracoval do pˇrehledn´eho grafu:
Obr´ azek 5.1: Graf v´ ysledk˚ u dotazn´ıku
U ot´azek 5 a 6 se vyskytly n´ asleduj´ıc´ı slovn´ı odpovˇedi (uvedu jen nˇekolik, protoˇze se opakovaly): Program vykon´ av´ a nˇeco“ na pozad´ı a uˇzivatel nen´ı upozornˇen. Po stisknut´ı ” tlaˇc´ıtka nast´av´ a dlouh´ a prodleva, neˇz se objev´ı v´ ysledek. Dlouh´e ˇcek´an´ı na dokonˇcen´ı operace. Nˇekter´e labely nejsou cel´e korektnˇe zobrazeny. Upravit velikost textbox˚ u na vkl´ad´an´ı u ´daj˚ u. Pouze anglick´ y jazyk. Chyb´ı varovn´ y dialog pˇri uzav´ıran´ı cel´e aplikace. Jak ukazuj´ı v´ ysledky, jedn´ım z nedostatk˚ u je informov´an´ı uˇzivatele, ˇze prob´ıh´a nˇejak´a v´ ypoˇcetn´ı ˇcinnost a ˇze by mˇel b´ yt trpˇeliv´ y. Z detailnˇejˇs´ıch dotaz˚ u jsem se dozvˇedˇel, ˇze nˇekteˇr´ı testeˇri byli ochotni chv´ıli ˇcekat a n´ aslednˇe okno zavˇreli, ponˇevadˇz si mysleli, ˇze nastala bl´ıˇze nespecifikovan´ a chyba. Tento nedostatek jsem pruˇznˇe opravil, viz 5.3.2. Dalˇs´ım z nedostatk˚ u, kter´e vyplynuly z dotazn´ıku, je pouze anglick´a lokalizace programu. Neuvˇedomil jsem si, ˇze nˇekteˇr´ı uˇzivatel´e maj´ı minim´ aln´ı nebo zcela ˇz´adn´ y z´aklad znalost´ı anglick´eho jazyka. Op´ıral jsem se o skuteˇcnost, ˇze znalost anglick´eho jazyka je vˇseobecnˇe povaˇzov´ana za standart. ˇ sen´ı je nasnadˇe - vytvoˇrit resource bundle[16] pro m˚ To byla chyba! Reˇ uj program 5.3.3. Drobn´e nedostatky jako chybˇej´ıc´ı varovn´ y dialog pˇri uzav´ıran´ı cel´e aplikace byly odstranˇeny a nebudou v t´eto kapitole pops´ any.
5.3.2
ˇ Cekac´ ı dialogov´ e okno
Vytvoˇril jsem nov´e dialogov´e okno, viz Obr´azek 5.2, kter´e se objev´ı pokaˇzd´e, kdy je nutn´e ˇcekat na dokonˇcen´ı zpracov´ an´ı poˇzadavk˚ u uˇzivatele. Toto okno nelze n´asilnˇe zavˇr´ıt. T´ım je zaruˇceno, ˇze uˇzivatel neukonˇc´ı pr´ avˇe prob´ıhaj´ıc´ı ˇcinnost a vˇedomˇe se doˇck´a k´ yˇzen´eho v´ ysledku. V k´odu se to potom projevilo vytvoˇren´ım nov´e tˇr´ıdy pojmenovan´e Waiter.java. V kaˇzd´e tˇr´ıdˇe, kde doch´ az´ı ke komunikaci s internetov´ ym serverem eBay a t´ım p´adem k delˇs´ım ˇcasov´ ym prodlev´ am pˇri zobrazen´ı v´ ysledk˚ u, bylo nutn´e pˇridat tyto ˇr´adky k´odu:
´ TESTOVAN ´ ´I TESTERY 5.3. PRAKTICKE
29
Obr´ azek 5.2: Informaˇcn´ı dialogov´e okno
void btnGetItem_actionPerformed(ActionEvent e) { JDialog dialog = new Waiter(DialogGetItem.this); Doer doer = new Doer(dialog); new Thread(doer).start(); dialog.setVisible(true); } private class Doer implements Runnable { private JDialog waiter; public Doer(JDialog waiter) { this.waiter = waiter; } public void run() { . . Vytvoˇren´ı podtˇr´ıdy v kaˇzd´e takov´e tˇr´ıdˇe mi umoˇznilo elegantnˇe oddˇelit grafickou ˇc´ ast k´odu a bussiness logiku, tak jak je to v aplikac´ıch vhodn´e a u ´ˇceln´e. Podtˇr´ıda se spouˇst´ı v nov´em vl´ aknˇe paralelnˇe se zobrazen´ ym ˇcekac´ım“ dialogem. ”
5.3.3
Resource bundle
Spr´ avnˇe napsan´ a aplikace by nemˇela obsahovat texty pˇr´ımo v k´odu. Proto je pouˇzita tˇr´ıda Messages.java, kter´ a se star´a o lokalizaci podle tˇr´ıdy ResourceBundle, konkr´etnˇe metody getBundle(BUNDLE NAME). public class Messages { private static final String BUNDLE_NAME = "ebay.messages"; private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle .getBundle(BUNDLE_NAME);
´ ´I KAPITOLA 5. TESTOVAN
30
private Messages() { } public static String getString(String key) { try { return RESOURCE_BUNDLE.getString(key); } catch (MissingResourceException e) { return ’!’ + key + ’!’; } } } V k´odu se pak odkazuje na texty jen pomoc´ı kl´ıˇc˚ u, a konkr´etn´ı text se dohled´av´a podle specifikovan´eho Locale. Defaultn´ı Locale je nastaven na anglick´ y jazyk. V souboru messages.properties jsou uloˇzeny vˇsechny kl´ıˇce, kter´e jsou pojmenov´any podle tˇr´ıd, v nichˇz se vyskytuj´ı, a hodnoty. AboutBox.2=Copyright (c) 2010 AboutBox.3=based on eBay SDK DialogSnipe.1=ItemID: DialogSnipe.10=Current Price: DialogSnipe.11=Buy It Now Price: . . Souˇc´ast´ı programu je pouze anglick´ y jazyk. Rozˇs´ıˇren´ı o dalˇs´ı lokalizace je primitivn´ı z´aleˇzitost´ı, kdy staˇc´ı vytvoˇrit nov´ y soubor podle souboru messages.properties a pouze pˇrepsat hodnoty kl´ıˇc˚ u do ˇz´ adan´eho jazyku.
5.4
Funkˇ cnost programu
Program pracuje bez omezen´ı v Sandbox verzi eBay. Aby byl plnˇe funkˇcn´ı3 i v produkˇcn´ı verzi eBay, mus´ıte administr´ atora eBay poˇz´adat emailem o povolen´ı aplikaci pouˇz´ıvat, coˇz je podm´ınˇeno seps´ an´ım smlouvy a dalˇs´ıch n´aleˇzitost´ı. Kaˇzdop´adnˇe se mus´ıte st´at partnerem eBay. Jinak se pˇri pˇrihozen´ı (ostatn´ı funkce programu nejsou omezeny) zobraz´ı dialogov´e okno s chybou This call, or certain logic flows within the call, are restricted to specific applications. Tato problematika je ˇreˇsena i na ofici´aln´ım f´oru eBay, a proto uv´ad´ım odkaz[8], kde se doˇctete v´ıce, pˇr´ıpadnˇe pˇr´ımo zde[15], kde jsou pops´any detaily a podm´ınky.
5.5
Zhodnocen´ı testov´ an´ı
Testov´an´ı mi pomohlo odhalit chyby, ˇci drobn´e nedostatky, kter´e jsem v pr˚ ubˇehu v´ yvoje postupnˇe odstranil a umoˇznilo mi l´epe pochopit sv˚ uj vlastn´ı k´od. Souˇcasnˇe pˇrispˇelo k lepˇs´ımu n´avrhu aplikace ˇci pˇr´ıpadn´emu refaktorov´an´ı jiˇz implementovan´eho zdrojov´eho k´odu. 3
T´ım m´ am na mysli, aby fungovalo pˇrihozen´ı.
Kapitola 6
Z´ avˇ er Implementov´ an´ım programu jsem splnil poˇzadavky na jednoduch´ y pˇrihazovac´ı program na eBay. Jelikoˇz jsem pouˇzil eBay API, bylo moˇzn´e rozˇs´ıˇrit funkˇcnost programu nad r´amec zad´an´ı o vyhled´ av´ an´ı poloˇzek na eBay, zobrazen´ı a smaz´an´ı zpr´av uˇzivatele, zjiˇstˇen´ı informac´ı o uˇzivateli a dalˇs´ı. Implementoval jsem rovnˇeˇz grafick´e uˇzivatelsk´e prostˇred´ı. K automatick´emu ukl´ ad´ an´ı a naˇc´ıt´ an´ı pˇrihlaˇsovac´ıch u ´daj˚ u slouˇz´ı XML soubor, do kter´eho jsou data z d˚ uvodu bezpeˇcnosti ˇsifrov´ ana. Vˇsechny funkce jsou pokryty jednotkov´ ymi testy a grafick´e uˇzivatelsk´e prostˇred´ı je otestov´ ano s pomoc´ı frameworku UISpec4J. Za v´ yhodu povaˇzuji, ˇze je aplikace implementov´ ana na z´akladˇe eBay API, tud´ıˇz pˇri vyd´an´ı nov´e verze nen´ı nutn´e modifikovat k´ od. T´ım je program pˇrizp˚ usoben zmˇen´am eBay. Jako moˇzn´e pokraˇcov´ an´ı pr´ ace bych doporuˇcil rozˇs´ıˇrit funkˇcnost programu smˇerem od ” uˇzivatele k eBay“. T´ım m´ am na mysli implementaci napˇr. vytvoˇren´ı nov´e aukce, registrov´ an´ı na eBay, pˇrid´ an´ı koment´ aˇr˚ u nebo obr´azk˚ u k aukci apod. eBay API vˇsechny zm´ınˇen´e funkce podporuje a pˇr´ımo se nab´ız´ı t´eto podpory vyuˇz´ıt a implementovat kompletn´ı program pro spr´avu aukc´ı na eBay. Vzhledem k tomu, ˇze m´ ym u ´kolem bylo naprogramovat pˇrihazovac´ı program, tak jsem data o aukc´ıch potˇreboval pouze z´ısk´avat, a proto jsem se rozhodl implementovat dalˇs´ı funkce programu pouze smˇerem z eBay k uˇzivateli“. Pomoc´ı resource bundlu ” lze lokalizovat program do v´ıce jazykov´ ych verz´ı tak, jak jsem na tuto skuteˇcnost poukazoval v kapitole testov´ an´ı. D´ ale by bylo vhodn´e obohatit funkˇcnost programu o uloˇzen´ı monitorovan´ ych aukc´ı pˇred vypnut´ım programu a jejich naˇcten´ı pˇri startu programu.
31
32
´ ER ˇ KAPITOLA 6. ZAV
Literatura [1] eBay Web Services Overview. http://developer.ebay.com/products/overview, stav z 3. 5. 2010. [2] Online aplikace pro nakupov´an´ı pˇres eBay. http://www.auctionsniper.com, stav z 5. 3. 2010, http://www.esnipe.com, stav z 5. 3. 2010, http://www.bidnapper.com, stav z 5. 3. 2010. [3] Informace o nakupov´ an´ı na eBay. http://www.ebayaukce.cz, stav ze 5. 3. 2010. [4] eBay: Mezin´ arodn´ı obchodn´ı port´al. http://www.eim.ebay.cz, stav z 2. 4. 2010. [5] eBay Developer Program homepage. http://developer.ebay.com, stav z 5. 3. 2010. [6] Ofici´ aln´ı str´ anky eBay. http://www.ebay.com, stav z 5. 3. 2010. [7] Rozˇs´ıˇren´ı do Mozilly Firefoxu. https://addons.mozilla.org/en-US/firefox/addon/5202, stav z 5. 3. 2010, https://addons.mozilla.org/en-US/firefox/addon/5571, stav z 5. 3. 2010. [8] eBay Developers Forum. http://dev-forums.ebay.com/thread.jspa?threadID=500005636&messageID= 500017584, stav z 11. 6. 2008. [9] UISpec4J: Java/Swing GUI testing. http://www.uispec4j.org, stav z 20. 5. 2010. [10] JBidwatcher: eBay sniping, bidding & monitoring software. http://www.jbidwatcher.com, stav z 20. 6. 2009. [11] Oracle Sun Developer Network (SDN). http://java.sun.com/javase/downloads/index.jsp, stav z 5. 3. 2010. ´ [12] Uvod do JSON. http://www.json.org, stav z 3. 5. 2010.
33
34
LITERATURA
[13] Ofici´aln´ı str´ anky Paypalu, MoneyBookers a BidPay. https://www.paypal.com/cz, stav z 1. 5. 2009, http://www.moneybookers.com/app/index.pl?l=CZ, stav z 1. 5. 2009, http://www.authorize.net/bidpay, stav z 1. 5. 2009. [14] PlaceOffer - referenˇcn´ı pˇr´ıruˇcka. http://developer.ebay.com/devzone/xml/docs/reference/ebay/PlaceOffer. html, stav z 20. 5. 2010. [15] PlaceOffer Best Practices. http://developer.ebay.com/DevZone/XML/docs/WebHelp/wwhelp/wwhimplcommon/ html/wwhelp.htm?context=eBay_XML_API&file=PlaceOfferCall-PlaceOffer_ Best_Practices.html, stav z 20. 5. 2010. [16] Java Internationalization: Localization with ResourceBundles. http://java.sun.com/developer/technicalArticles/Intl/ResourceBundles, stav z 20. 5. 2010. [17] REST: architektura pro webov´e API. http://zdrojak.root.cz/clanky/rest-architektura-pro-webove-api, 3. 5. 2010.
stav
[18] ITBiz Sniffing: Odposlech datov´e komunikace. http://www.itbiz.cz/sniffing-odposlech-datove-komunikace, stav z 6. 3. 2009. [19] W3C: SOAP. http://www.w3.org/TR/soap, stav z 3. 5. 2010. [20] API Test Tool. https://developer.ebay.com/DevZone/build-test/test-tool/Default.aspx, stav z 20. 5. 2010.
z
Pˇ r´ıloha A
Seznam pouˇ zit´ ych zkratek API Application Programming Interface ASCII American Standard Code for Information Interchange CAPTCHA Completely Automated Public Turing test to tell Computers and Humans Apart CD Compact Disc DOM Document Object Model eIM eBay International Market GUI Graphical User Interface HTML HyperText Markup Language HTTP Hypertext Transfer Protocol HTTPS Hypertext Transfer Protocol ID Identification IDE Integrated Development Environment IP Internet Protocol JDK Java Development Kit JRE Java Runtime Environment JSON JavaScript Object Notation PHP Hypertext Preprocessor REST Representational State Transfer SAX Simple API for XML
35
36
SDK Software Development Kit SOAP Simple Object Access Protocol URL Uniform Resource Locator XML Extensible Markup Language .. .
ˇ ´ILOHA A. SEZNAM POUZIT ˇ YCH ´ PR ZKRATEK
Pˇ r´ıloha B
Instalaˇ cn´ı a uˇ zivatelsk´ a pˇ r´ıruˇ cka Poˇ zadavky programu na hardware a software Program ke sv´emu bˇehu vyˇzaduje JRE[11], k v´ yvoji JDK[11] ve verzi 1.6 update 3 nebo vyˇsˇs´ı. Cel´ y program pracuje jako celek a autentizuje se v˚ uˇci eBay Trading Web Services. Tud´ıˇz je zapotˇreb´ı m´ıt registrovan´ y u ´ˇcet na eBay, ale tak´e v eBay Developers Programu, ´ cet v eBay Developers Programu poskytuje Develjejichˇz u ´ˇcty jsou vz´ ajemnˇe propojeny. Uˇ operID, ApplicationID, CetrificateID a eBay token, jenˇz jsou pˇri prvn´ım pˇripojen´ı ovˇeˇrov´ any. Tyto u ´daje lze tak´e plnˇe vyuˇz´ıt pro pˇripojen´ı do testovac´ıho prostˇred´ı eBay Developers Program Sandbox, kde je moˇzn´e virtu´alnˇe spravovat sv˚ uj mini“ eBay t´ım, ˇze registrujete fiktivn´ı ” prod´avaj´ıc´ı a nakupuj´ıc´ı. Dalˇs´ım poˇzadavkem je rozliˇsen´ı obrazovky - doporuˇcuji alespoˇ n 1024 x 768 - i kdyˇz program umoˇzn ˇuje zmˇenu velikosti oken. Program nen´ı nijak n´aroˇcn´ y na hardware. Postaˇc´ı bˇeˇzn´ y stoln´ı poˇc´ıtaˇc ˇci notebook. Aplikace vytv´aˇr´ı jen minimum nov´ ych soubor˚ u (pouze logy do souboru), proto nejsou velk´e n´aroky na pamˇet’ov´ y prostor na pevn´em disku - postaˇc´ı 20MB voln´eho m´ısta. Nutnost´ı je st´al´e internetov´e pˇripojen´ı.
Prvn´ı spuˇ stˇ en´ı programu Nejdˇr´ıve je nutn´e m´ıt nainstalovan´e JDK a JRE. Na pˇriloˇzen´em CD v adres´aˇri /data/java/ naleznete instalaˇcn´ı soubory pro operaˇcn´ı syst´emy Linux a Windows v 32 i 64 bitov´ ych verz´ıch. Pokud potˇrebujete st´ ahnout jinou verzi JDK ˇci JRE nebo zjistit v´ıce informac´ı o instalaci, naleznete ji ke staˇzen´ı zde[11]. V dobˇe psan´ı tohoto dokumentu byla aktu´aln´ı verze 1.6 u20. V tomt´eˇz adres´ aˇri se vyskytuj´ı i licence, s kter´ ymi mus´ıte souhlasit, abyste mohli JDK a JRE pouˇz´ıvat. V adres´ aˇri /data/jar program/ naleznete spustiteln´ y jar archiv s programem - Ebay.jar, soubor Config.xml, kter´ y obsahuje pˇrihlaˇsovac´ı u ´daje - URL k eBay. Pokud se tento soubor v adres´ aˇri nevyskytne nebo je jeho obsah nespr´avn´ y, objev´ı se pˇri spuˇstˇen´ı varovn´e dialogov´e okno. Funkˇcnost programu vˇsak nijak neomez´ı. D´ale se v adres´aˇri vyskytuje soubor log4j.config, kter´ y slouˇz´ı k v´ ypis˚ um dat do souboru a takt´eˇz nen´ı jeho existence nutn´a. Po nainstalov´ an´ı prostˇred´ı Javy by mˇelo b´ yt moˇzn´e program spustit podobnˇe jako bˇeˇzn´ y .exe soubor, tedy dvojit´ ym kliknut´ım lev´eho tlaˇc´ıtka myˇsi. Nebo je moˇzn´e program spustit v
37
38
ˇ ´ILOHA B. INSTALACN ˇ ´I A UZIVATELSK ˇ ´ PR ˇ ´IRUCKA ˇ PR A
termin´alu pˇr´ıkazem: java -jar /cesta k souboru/Ebay.jar. Pokud vˇse probˇehlo bez chyb, mˇelo by se V´am zobrazit n´ asleduj´ıc´ı okno, viz Obr´azek B.1.
Obr´ azek B.1: Hlavn´ı okno pˇrihazovac´ıho programu Kliknut´ım na tlaˇc´ıtko Config Account se V´am zobraz´ı okno s nastaven´ım pˇrihlaˇsovac´ıch u ´daj˚ u, viz Obr´ azek B.2. Nastavte pˇrihlaˇsovac´ı u ´daje dle bodu Moˇznosti nastaven´ı pˇripojen´ı 38. Program V´ as na to upozorn´ı v pˇr´ıpadˇe, ˇze budete cht´ıt vyvolat nˇejakou funkci z nab´ıdky a nebudete je m´ıt nastaven´e. Abyste nemuseli pˇri kaˇzd´em spuˇstˇen´ı programu zad´avat znova a znova veˇsker´e pˇrihlaˇsovac´ı u ´daje, m˚ uˇzete tyto u ´daje uloˇzit do XML souboru a to vyvol´an´ım nab´ıdky File - Save Account (Obr´ azek B.3). Pˇrihlaˇsovac´ı u ´daje se zapisuj´ı do souboru ˇsifrovan´e, proto nen´ı vhodn´e vytv´ aˇret tento XML soubor ruˇcnˇe“. Pˇri dalˇs´ım pˇrihl´aˇsen´ı staˇc´ı ” jen vyvolat nab´ıdku File - Load Account (Obr´azek B.3) a veˇsker´e u ´daje z V´ami vybran´eho souboru se rozˇsifruj´ı a zap´ıˇs´ı do programu.
Moˇ znosti nastaven´ı pˇ ripojen´ı Program umoˇzn ˇuje se pˇripojit do produkˇcn´ı verze eBay a testovac´ı eBay Sandbox. Podle toho se liˇs´ı i pˇrihlaˇsovac´ı u ´daje1 . Pro eBay (produkˇcn´ı verze): 1 Je zˇrejm´e, ˇze pˇri zadan´ı pˇrihlaˇsovac´ıch u ´daj˚ u pro produkˇcn´ı verzi eBay bude program pracovat pouze s poloˇzkami v produkˇcn´ı verzi eBay, nikoliv vˇsak s poloˇzkami v sandbox verzi. To sam´e intuitivnˇe plat´ı pˇri zad´ an´ı pˇrihlaˇsovac´ıch u ´daj˚ u pro sandbox verzi eBay.
39
Obr´ azek B.2: Okno zobrazuj´ıc´ı pˇrihlaˇsovac´ı u ´daje do eBay
• DeveloperID: vaˇse DevID • ApplicationID: vaˇse AppID • Certificate: vaˇse CertID • Token: v´ aˇs User token • EPS Server URL: https://api.ebay.com/ws/api.dll • API Server URL: https://api.ebay.com/wsapi • Sign-In URL: https://signin.ebay.com/ws/eBayISAPI.dll?SignIn Pro eBay Sandbox (sandbox verze): • DeveloperID: vaˇse DevID • ApplicationID: vaˇse AppID • Certificate: vaˇse CertID
ˇ ´ILOHA B. INSTALACN ˇ ´I A UZIVATELSK ˇ ´ PR ˇ ´IRUCKA ˇ PR A
40
Obr´ azek B.3: Okno zobrazuj´ıc´ı uloˇzen´ı nebo naˇcten´ı souboru
• Token: v´ aˇs User token • EPS Server URL: https://api.sandbox.ebay.com/ws/api.dll • API Server URL: https://api.sandbox.ebay.com/wsapi • Sign-In URL: https://signin.sandbox.ebay.com/ws/eBayISAPI.dll?SignIn Po vyplnˇen´ı pˇrihlaˇsovac´ıch u ´daj˚ u uˇz m˚ uˇzete, kliknut´ım na pˇr´ısluˇsn´e tlaˇc´ıtko z nab´ıdky, vyvolat jednotliv´e funkce, jenˇz z´ısk´ avaj´ı informace z eBay. Ve vˇetˇsinˇe pˇr´ıpad˚ u je nutn´e zadat nejdˇr´ıve nˇejakou hodnotu jako napˇr. item ID, text pro vyhled´av´an´ı apod2 . Pokud se tak nestane, objev´ı se dialogov´e okno s varov´an´ım. Ovl´ad´an´ı je jinak jednoduch´e a veskrze intuitivn´ı. Pro ukonˇcen´ı aplikace kliknˇete na kˇr´ıˇzek nebo v menu File - Exit.
Popis funkce Snipe Jak bylo zm´ınˇeno v´ yˇse, je nejdˇr´ıve nutn´e zadat item ID k dan´e poloˇzce na eBay (Obr´azek B.4). Pot´e program chv´ıli pracuje - zobraz´ı informativn´ı okno, kter´e z´amˇernˇe nelze zavˇr´ıt pot´e zobraz´ı z´ıskan´e u ´daje o poloˇzce. Podle zadan´eho item ID aplikace zjist´ı, jak´eho typu je dan´a aukce a podle toho V´ am zpˇr´ıstupn´ı dalˇs´ı moˇznosti resp. tlaˇc´ıtka3 , co lze s danou 2
Pro n´ azornost detailnˇe pop´ıˇsi n´ıˇze funkci Snipe N´ azvy tlaˇc´ıtek koresponduj´ı s n´ azvy typ˚ u aukc´ı v anglick´e verzi eBay, tedy Buy It Now, Best Offer a pro Chinese aukci je to tlaˇc´ıtko Snipe. 3
41
Obr´ azek B.4: Okno zobrazuj´ıc´ı pˇrihazovac´ı menu
aukc´ı prov´est a nastav´ı tak´e omezen´ı na fin´aln´ı cenu a kvantitu. Tedy pro Snipe mus´ı b´ yt nastavena v´ yˇse fin´ aln´ı ˇc´ astky vˇetˇs´ı, neˇz je ta souˇcasn´a, pro Buy It Now mus´ı b´ yt nastaven´ a pˇresnˇe Buy It Now Price ˇc´ astka zjiˇstˇen´a pro danou poloˇzku a v Best Offer je na V´as, jakou ˇc´astku nab´ıdnete. Kvantita mus´ı b´ yt vˇzdy menˇs´ı nebo rovna kvantitˇe dan´eho zboˇz´ı na eBay. Tlaˇc´ıtkem Get IP se program pokus´ı z´ıskat Vaˇsi IP adresu, pokud se mu to nepodaˇr´ı, je nutn´e, abyste ji zadali ruˇcnˇe. Pokud jste vˇse nastavili spr´ avnˇe, aplikace danou poloˇzku koup´ı za fixn´ı cenu, vytvoˇr´ı nejlepˇs´ı nab´ıdku a nebo pˇrid´ a poloˇzku do seznamu monitorovan´ ych poloˇzek, coˇz se projev´ı zobrazen´ım nov´eho okna (Obr´ azek B.5). V tomto oknˇe lze ono monitorov´an´ı sledovat, pˇr´ıpadnˇe pokud se rozhodnete poloˇzku ze seznamu odebrat, oznaˇcte ji a stisknˇete kl´avesu delete. Pokud byste chtˇeli zmˇenit fin´ aln´ı cenu pˇrihozen´ı nebo poˇcet kus˚ u dan´eho zboˇz´ı ke koupi, mus´ıte tuto poloˇzku ze seznamu smazat a pot´e znova pˇridat jej´ı nov´e monitorov´an´ı. Chtˇel bych upozor-
ˇ ´ILOHA B. INSTALACN ˇ ´I A UZIVATELSK ˇ ´ PR ˇ ´IRUCKA ˇ PR A
42
nit na to, ˇze vˇsechna okna v cel´e aplikaci m˚ uˇzete bez probl´em˚ u zavˇr´ıt, aniˇz byste zruˇsili prob´ıhaj´ıc´ı monitorov´ an´ı poloˇzek. Aˇz ukonˇcen´ım programu, tedy hlavn´ıho okna, pˇrijdete o vˇsechny monitorovan´e aukce, na coˇz budete upozornˇeni dialogov´ ym oknem. Proto program jako takov´ y mus´ı bˇeˇzet! Pokud byste chtˇeli jen zobrazit okno s pr´avˇe prob´ıhaj´ıc´ım monitorov´an´ım, vyvolejte z nab´ıdky v hlavn´ım menu ViewSniffedItems. Pokud dojde k doˇcasn´e ztr´atˇe internetov´eho spojen´ı, program ˇcek´a, dokud nen´ı spojen´ı opˇet nav´az´ano.
Obr´ azek B.5: Okno zobrazuj´ıc´ı tabulku monitorovan´ ych poloˇzek
D˚ uleˇ zit´ e upozornˇ en´ı: Program funguje bez omezen´ı v sandbox verzi eBay. Aby byl plnˇe funkˇcn´ı4 i v produkˇcn´ı verzi eBay, mus´ıte administr´atora eBay poˇz´adat emailem o povolen´ı aplikaci pouˇz´ıvat, coˇz je podm´ınˇeno seps´ an´ım smlouvy a dalˇs´ıch n´aleˇzitost´ı. Kaˇzdop´adnˇe se mus´ıte st´at partnerem eBay. Jinak se pˇri pˇrihozen´ı (ostatn´ı funkce programu nejsou omezeny) zobraz´ı dialogov´e okno s chybou This call, or certain logic flows within the call, are restricted to specific applications. Tato problematika se ˇreˇsila i na ofici´aln´ım f´oru eBay, a proto uv´ad´ım odkaz[8], kde se doˇctete v´ıce, pˇr´ıpadnˇe pˇr´ımo zde[15], kde jsou pops´any detaily a podm´ınky.
4
T´ım m´ am na mysli, aby fungovalo pˇrihozen´ı.
Pˇ r´ıloha C
Obsah pˇ riloˇ zen´ eho CD
Obr´ azek C.1: Seznam pˇriloˇzen´eho CD
43