57
Zad´ an´ ı bakal´ rsk´ e pr´ ace Navrhnˇ ete a implementujte automatick´ y pˇ rihazovac´ ı program pro aukˇ cn´ ı port´ al e- bay.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ˇ zet pod operaˇ cn´ ım syst´ emem Linux. GUI nen´ ı vyˇ zadov´ ano, program lze ovl´ adat pˇ res pˇ ıkazovou ˇ adku. 1

Zad an bakal a rsk e pr ace · 2015. 1. 2. · Ond rej Hrabal Vedouc pr ace:Ing. Ji r Sm tka Studijn program: Elektrotechnika a informatika, dob haj c , Bakal a rsky Obor: Vyp o cetn

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • Zadáńı bakalářské práce

    • Navrhněte a implementujte automatický přihazovaćı program pro aukčńı portál e-bay.com.

    • Program bude sledovat zadanou aukci a v poslednich 5 sekundách přihod́ı v této aukcizadanou cenu.

    • Program muśı umět hĺıdat v́ıce aukćı zároveň.

    • Program muśı běžet pod operačńım systémem Linux.

    • GUI neńı vyžadováno, program lze ovládat přes př́ıkazovou řádku.

    1

  • 2

  • České vysoké učeńı technické v PrazeFakulta elektrotechnická

    Katedra poč́ıtač̊u

    Bakalářská práce

    Automatický přihazovaćı systém pro e-bay.com

    Ondřej Hrabal

    Vedoućı práce: Ing. Jǐŕı Smı́tka

    Studijńı program: Elektrotechnika a informatika, dob́ıhaj́ıćı, Bakalářský

    Obor: Výpočetńı technika

    10. března 2013

  • iv

  • v

    Poděkováńı

    Velmi rád bych t́ımto poděkoval vedoućımu své bakalářské práce, Ing. Jǐŕımu Smı́tkovi, zahodnotné rady a veškerý čas, který mi věnoval. Dále pak svým rodič̊um a kamarád̊um zavynikaj́ıćı pasivńı podporu v dlouhodobé práci.

  • vi

  • vii

    Prohlášeńı

    Prohlašuji, že jsem práci vypracoval samostatně a použil jsem pouze podklady uvedenév přiloženém seznamu.Nemám závažný d̊uvod proti užit́ı tohoto školńıho d́ıla ve smyslu §60 Zákona č. 121/2000Sb., o právu autorském, o právech souvisej́ıćıch s právem autorským a o změně některýchzákon̊u (autorský zákon).

    V Hranićıch dne 18. 5. 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

  • viii

  • Abstract

    The purpose and goal of my work is to design and implement an automatic bidding systemfor (the auction portal) e-bay.com. The program will watch a given auction and make a bid inlast 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 theprogram can be controlled via command line.

    Abstrakt

    Podstatou a ćılem práce je navrhnout a implementovat automatický přihazovaćı programpro aukčńı portál e-bay.com.Program bude sledovat zadanou aukci a v posledńıch 5 sekundách přihod́ı v této aukcizadanou cenu, zároveň však muśı umět hĺıdat v́ıce aukćı zároveň. Program muśı běžet podoperačńım systémem Linux, přičemž grafické uživatelské rozhrańı (GUI) neńı vyžadováno,ovládáńı lze provést přes př́ıkazovou řádku.

    ix

  • x

  • Obsah

    1 Úvod 11.1 Historie eBay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Princip on-line aukce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Současné trendy on-line nakupováńı . . . . . . . . . . . . . . . . . . . . . . . 2

    2 Motivace 52.1 Ćıle práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Výsledek práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 Existuj́ıćı implementace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    3 Analýza a návrh řešeńı 73.1 Programovaćı jazyk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.2 Použité prostřed́ı pro tvorbu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    4 Realizace 114.1 Implementace využ́ıvaj́ıćı eBay API . . . . . . . . . . . . . . . . . . . . . . . 114.2 Přihlášeńı do systému . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    4.2.1 Struktura XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.3 Źıskáńı informaćı o položce na eBay . . . . . . . . . . . . . . . . . . . . . . . 154.4 Přihozeńı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    4.4.1 Klasická přihazovaćı aukce . . . . . . . . . . . . . . . . . . . . . . . . 184.4.1.1 Vytvořeńı nab́ıdky a přihozeńı . . . . . . . . . . . . . . . . . 184.4.1.2 Monitorováńı aukćı . . . . . . . . . . . . . . . . . . . . . . . 194.4.1.3 Vyhodnoceńı času přihozeńı . . . . . . . . . . . . . . . . . . 204.4.1.4 Zrušeńı monitorované aukce . . . . . . . . . . . . . . . . . . 214.4.1.5 Názorný popis celého procesu přihozeńı . . . . . . . . . . . . 21

    4.4.2 Koupě položky za fixńı cenu . . . . . . . . . . . . . . . . . . . . . . . . 224.4.3 Posláńı nejlepš́ı nab́ıdky . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    4.5 Posláńı požadavku PlaceOffer . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.5.1 Struktura HTTP hlavičky . . . . . . . . . . . . . . . . . . . . . . . . . 224.5.2 Struktura XML požadavku . . . . . . . . . . . . . . . . . . . . . . . . 23

    5 Testováńı 255.1 Jednotkové testy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255.2 Testy grafického uživatelského rozhrańı . . . . . . . . . . . . . . . . . . . . . . 26

    5.2.1 Mockováńı objekt̊u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    xi

  • xii OBSAH

    5.3 Praktické testováńı testery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275.3.1 Výsledky testováńı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.3.2 Čekaćı dialogové okno . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.3.3 Resource bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    5.4 Funkčnost programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305.5 Zhodnoceńı testováńı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    6 Závěr 31

    Literatura 33

    A Seznam použitých zkratek 35

    B Instalačńı a uživatelská př́ıručka 37

    C Obsah přiloženého CD 43

  • Seznam obrázk̊u

    1.1 Oficiálńı internetová stránka eBay . . . . . . . . . . . . . . . . . . . . . . . . 2

    2.1 Program JBidwatcher verze 2.1pre5 . . . . . . . . . . . . . . . . . . . . . . . . 6

    3.1 Model požadavk̊u přihazovaćıho programu . . . . . . . . . . . . . . . . . . . . 73.2 Model př́ıpad̊u užit́ı přihazovaćıho programu . . . . . . . . . . . . . . . . . . 8

    4.1 Model nasazeńı přihazovaćıho programu . . . . . . . . . . . . . . . . . . . . . 134.2 Sekvenčńı diagram uložeńı přihlašovaćıch údaj̊u do XML souboru . . . . . . . 154.3 Źıskáńı tzv. Item number u položky na eBay . . . . . . . . . . . . . . . . . . 164.4 Okno zobrazuj́ıćı přihazovaćı menu . . . . . . . . . . . . . . . . . . . . . . . . 174.5 Bussiness model přihozeńı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    5.1 Graf výsledk̊u dotazńıku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.2 Informačńı dialogové okno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    B.1 Hlavńı okno přihazovaćıho programu . . . . . . . . . . . . . . . . . . . . . . . 38B.2 Okno zobrazuj́ıćı přihlašovaćı údaje do eBay . . . . . . . . . . . . . . . . . . . 39B.3 Okno zobrazuj́ıćı uložeńı nebo načteńı souboru . . . . . . . . . . . . . . . . . 40B.4 Okno zobrazuj́ıćı přihazovaćı menu . . . . . . . . . . . . . . . . . . . . . . . . 41B.5 Okno zobrazuj́ıćı tabulku monitorovaných položek . . . . . . . . . . . . . . . 42

    C.1 Seznam přiloženého CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    xiii

  • xiv SEZNAM OBRÁZKŮ

  • Kapitola 1

    Úvod

    V bakalářské práci se zabývám asi nejznáměǰśı americkou internetovou aukčńı śıńı eBay[6].Hlavńım tématem mé práce je vytvořit aplikaci schopnou automaticky sledovat v́ıce aukćısouběžně a v posledńı chv́ıli prob́ıhaj́ıćı aukce přihodit předem nastavenou částku. Pokuśımse čtenáře krátce obeznámit s historíı a současnými trendy internetových aukćı. Dále bĺıžespecifikuji ćıle, vytvoř́ım analýzu a návrh řešeńı, provedu realizaci, tedy implementaci řešeńı,kterou řádně otestuji a na závěr zhodnot́ım splněńı ćıl̊u bakalářské práce a budu diskutovato jej́ım daľśım možném pokračováńı.

    1.1 Historie eBay

    Obchodńı aukčńı portál eBay 1.1 (dále jen eBay) byl založen v San José 4. zář́ı 1995poč́ıtačovým programátorem Pierrem Omidyarem jako AuctionWeb.1 AuctionWeb patřilOmidyarově konzultačńı společnosti jménem Echo Bay Technology Group. Protože všakdoménu echobuy.com tehdy vlastnila jedna kanadská těžebńı společnost, Sierr Omidyarzkrátil název a v zář́ı 1997 zaregistroval doménu ebay.com.

    Za tu dobu prošla řadou změn a vylepšeńı. Od roku 1999 eBay prož́ıvá mezinárodńıexpanzi2 a stal se největš́ı světovou aukčńı śıńı, která p̊usob́ı již ve čtyřech deśıtkách zemı́na všech světových kontinentech. Dnes má v́ıce než 90 milion̊u uživatel̊u po celém světě.eBay také úzce spolupracuje s daľśımi světovými softwarovými systémy[13] jako je PayPal,MoneyBookers či BidPay nebo Skype, který v roce 2005 koupil a stal se tak jeho většinovýmvlastńıkem.

    Málokdo v́ı, že je eBay pr̊ukopńıkem v porovnáváńı cen produkt̊u od jednotlivých prodejc̊u,které je velmi populárńım a rozš́ı̌rilo se do celého světa (u nás známe např. zbozi.cz).

    Za zmı́nku také stoj́ı, že od roku 2008 funguje v Praze eBay Center of Excellence, mar-ketingové a analytické centrum zaměřuj́ıćı se na evropské a asijské trhy. Úplnou novinkou jeoficiálńı expanze eBay k datu 25. března 2010 na český trh, což přináš́ı plnou lokalizaci dočeského jazyka[4].

    1Prvńı prodanou položku a tou bylo rozbité laserové ukazovátko, které se prodalo za cenu 14.83 dolar̊u.2Tržǐstě eIM tzv. elektronický mezinárodńı obchodńı portál.

    1

  • 2 KAPITOLA 1. ÚVOD

    Obrázek 1.1: Oficiálńı internetová stránka eBay

    1.2 Princip on-line aukce

    Aktivně se účastnit aukce[3] mohou jen registrovańı uživatelé, ostatńı smı́ jen aukci po-zorovat. Registrace je zdarma, přičemž se zpravidla vyžaduje jméno, př́ıjmeńı, kontaktńı aemailová adresa, na kterou je poté zaslán potvrzovaćı email, který obsahuje odkaz, po jehožkliknut́ı se dokonč́ı registrace.

    Aukce prob́ıhaj́ı od zvolené částky a trvaj́ı r̊uzně dlouho (zpravidla ne déle jak měśıc).Aukci vyhrává pochopitelně nejvyšš́ı nab́ıdka. Kromě klasického aukčńıho

    ”přihazováńı“,

    čemuž se na eBay oficiálně ř́ıká Chinese auction, lze využ́ıt možnosti Buy it now, což znamenánakoupit zbož́ı okamžitě za stanovenou fixńı cenu. Tyto dva typy aukćı je možno kombinovattak, že daná položka aukce je dražena tradičńım zp̊usobem a přitom má nastavenu fixńı cenu.Je zřejmé, že fixńı cena je vyšš́ı než počátečńı cena nastavená klasickým přihazováńım. Dálelze využ́ıt třet́ıho typu aukce, jenž se vyskytuje pouze společně s Buy it now aukćı a to jetzv. Best offer. To znamená, že kromě možnosti koupě položky za fixńı cenu, je umožněnoprodejci udělat nab́ıdku vlastńı ceny, kterou může a nemuśı přijmout. Po skončeńı aukcemá prodejce sedm dńı na vyř́ızeńı obchodu, tedy výměny zbož́ı a peněz. Je užitečné mı́tzaregistrovaný účet v systému PayPal, protože se ho dá u většiny aukćı využ́ıt. Nejlepš́ı jemı́t účet ověřený, k čemuž stač́ı registrovaná platebńı karta s neblokovanou možnost́ı on-lineplateb.

    1.3 Současné trendy on-line nakupováńı

    Internetová aukce se posléze stala celosvětovým hitem, jenž umožňuje lidem prodávata nakupovat široké spektrum zbož́ı a služeb on-line. Dı́ky velmi široké nab́ıdce zbož́ı odprodejc̊u z celého světa lze přes eBay koupit či prodat prakticky cokoliv3. Aukce eBay senachaźı na několika doménách (ebay.com, ebay.de, ebay.ca, ebay.co.uk, ebay.cz, ebay.com.au

    3Jsou známy i př́ıpady, kdy nespokojený manžel prodával v aukci svou manželku.

  • 1.3. SOUČASNÉ TRENDY ON-LINE NAKUPOVÁNÍ 3

    atd.), které jsou vzájemně propojeny, tud́ıž pro spokojené nakupováńı stač́ı jeden uživatelskýúčet.

    Pro informaci uvedu i jiné konkurenčńı aukčńı portály:

    • http://www.amazon.com

    • http://www.aukro.cz

    • http://heureka.cz

    • http://ikup.cz

    Výhod internetových aukćı je nespočet, proto krátce uvedu jen ty hlavńı. V prvé řadě jeto nab́ıdka obrovského sortimentu zbož́ı, které nemůže konkurovat žádný obchod na světě.Dále jsou to nižš́ı ceny, jelikož aukčńı systém pružně reaguje na celkovou poptávku a nab́ıdkuzbož́ı, tud́ıž poskytuje rovnovážnou cenu. Z daľśıch výhod jmenujme např. snadnou komu-nikaci mezi prodejci a zákazńıky, fotografie a popisy zbož́ı, dále pak vyhledáváńı podlekĺıčových slov a v neposledńı řadě pohodlnost vyř́ızeńı obchodu (poněvadž vše, co člověkpotřebuje, je zaregistrovaný účet na portálu a zař́ızeńı připojené k internetu) a rychlost,protože každý prodejce je povinen mı́t zbož́ı fyzicky k dispozici, tud́ıž nehroźı problém jakov řadě internetových obchod̊u, kdy zbož́ı neńı skladem dostupné.

    Existuj́ı ovšem i nevýhody. A to kupř́ıkladu placeńı poštovného, jež se může prodražit vpř́ıpadě, že nakupujeme od v́ıce prodejc̊u. Daľśı nevýhodou je nutnost

    ”bojovat“ se soupeři v

    aukci, kteř́ı maj́ı zájem o to samé zbož́ı. Tento problém se pokuśım vyřešit ve své bakalářsképráci.

  • 4 KAPITOLA 1. ÚVOD

  • Kapitola 2

    Motivace

    Motivaćı pro vytvořeńı programu mi bylo zjǐstěńı, že eBay poskytuje API pro některé svéslužby.1 To se mi jev́ı jako velmi kladný př́ıstup, z kterého mohou čerpat i ostatńı vývojáři.

    Tato práce neńı rešeršńı, což znamená, že se nesnaž́ım popsat r̊uzné zp̊usoby dosažeńıtéhož výsledku, ale naopak voĺım jeden, dle mého názoru nejlepš́ı a nejjednodušš́ı (na os-tatńı řešeńı př́ıpadně upozorňuji) a ten podrobně rozeb́ırám. Vše jsem se snažil co možnánejpraktičtěji vysvětlit a popsat, aby čtenář dokázal snadno proniknout do problematiky.

    2.1 Ćıle práce

    Hlavńım ćılem této práce je na základě uvedených požadavk̊u vytvořit funguj́ıćı program,a řádně ho otestovat.

    • Popis řešeného problému, vymezeńı ćıl̊u bakalářské práce a požadavk̊u na implemen-tovaný systém.

    • Zhodnoceńı existuj́ıćıch implementaćı.

    • Analýza a návrh implementace.

    • Vytvořeńı programu a následný popis implementace.

    • Testováńı aplikace.

    • Zhodnoceńı splněńı ćıl̊u bakalářské práce a vlastńıho př́ınosu.

    • Diskuze daľśıho možného pokračováńı práce.

    1O tom později v analýze a návrhu řešeńı.

    5

  • 6 KAPITOLA 2. MOTIVACE

    2.2 Výsledek práce

    Jak vypadá konkrétńı podoba výsledného programu? Je to desktopová aplikace, která:

    • po zadáńı přihlašovaćıch údaj̊u vytvoř́ı spojeńı s aukčńım portálem eBay.com,

    • podle ID př́ıslušné aukce zobraźı informace o dané aukci,

    • dokáže monitorovat v́ıce aukćı současně,

    • zjist́ı oficiálńı čas aukčńıho portálu eBay.com pro synchronizaci přesného času”př́ıhozu“,

    • po nastaveńı finálńı částky”přihod́ı“ tuto sumu v posledńıch 5 sekundách aukce,

    • funguje pod operačńım systémem Linux i Windows,

    • má grafické uživatelské prostřed́ı (GUI).

    2.3 Existuj́ıćı implementace

    V současné době je mi známa pouze jedna desktopová aplikace funguj́ıćı na podobnémprincipu a to jBidwatcher[10]. Je to freeware program implementovaný v Javě, maj́ıćı zaúkol monitorovat a přihazovat částku v posledńım momentě aukce. Kromě toho umožňujevyhledáváńı položek na eBay a časovou synchronizaci s eBay serverem. V době psańı tétopráce se aplikace nacházela v pre-release stadiu, viz Obrázek 2.1.

    Obrázek 2.1: Program JBidwatcher verze 2.1pre5

    Dále existuje několik doplňk̊u pro prohĺıžeč Mozilla Firefox[7], jež jsou většinou neaktuálńıa zastaralé s t́ım, jak eBay měńı své stránky a zabezpečuje se proti sniffingu[18] nebo jsoutyto pluginy propojené s účty on-line aplikaci[2], které však vyžaduj́ı registraci a maj́ı jistéomezeńı či nevýhody, jako kupř́ıkladu si vynucuj́ı pod́ıl na vyhrané aukci nebo při zadáńımonitorováńı nové aukce požaduj́ı zaplaceńı jednorázového poplatku apod.

  • Kapitola 3

    Analýza a návrh řešeńı

    Jaké požadavky jsou tedy kladeny na program? Vycháźım z oficiálńıho zadáńı práce adále pak požadavk̊u běžného uživatele. Aplikace by měla být stabilńı a co se týká ovládáńıuživatelsky př́ıvětivá. Z tohoto d̊uvodu jsem se rozhodl implementovat GUI, ovšem připodmı́nce zachováńı jednoduchosti. A to proto, že bych byl nerad, kdyby se GUI staloobtěžuj́ıćım faktorem, jenž uživateli znepřehledňuje činnost a zhoršuje schopnosti ovládatprogram a orientovat se v něm. Co se týká stability programu jsou kladeny nároky předevš́ımna chyby zp̊usobené uživatelem, jako např. nevhodná forma vstupńıch dat i na chyby

    ”prostře-

    d́ı“ jako je např. náhlá ztráta internetového spojeńı. Jednou z d̊uležitých a často opomı́jenýchvlastnost́ı je také nenáročnost instalace programu a jeho spuštěńı. Tady bych, i zd̊uvod̊u popsaných ńıže 3.1, preferoval programovaćı jazyk Java, jenž má tu možnost vytvořitspustitelný soubor - jar archiv, což je pro běžného uživatele pohodlněǰśı než např. spouštětbash skript či instalovat lokálńı server.

    Obrázek 3.1: Model požadavk̊u přihazovaćıho programu

    Vzhledem k tomu, že jsem si stanovil za ćıl, aby program byl schopný se autentifikovata autorizovat na eBay, bude nutné, aby uživatel vyplnil své přihlašovaćı údaje. T́ım vznikádaľśı požadavek na program a neńı j́ım nic jiného než bezpečnost. Protože je standardem,aby aplikace uměla přihlašovaćı údaje nač́ıtat a ukládat, poněvadž vyplňovat je s každýmdaľśım spuštěńım programu je nepohodlné, rozhodl jsem se, že tuto funkčnost implementujive svém řešeńı. Za vhodný formát uložeńı textových dat považuji stromovou strukturu, s ńıžse velmi dobře pracuje. Programovaćı jazyk Java nab́ıźı řadu technologíı pro práci s jazykem

    7

  • 8 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ

    XML. Proto jsem se rozhodl použ́ıt tento značkovaćı jazyk, jenž splńı mé požadavky najednoduchost práce a stromovou strukturu. Pracovat budu s DOMem, poněvadž je mi bližš́ınež práce s SAX, i když ten má nesporné výhody v nižš́ı pamět’ové náročnosti a rychlostiu

    ”větš́ıch“ dokument̊u. Já budu ovšem použ́ıvat jednoduchou stromovou strukturu, kde

    výsledný dokument nebude”velký“1, tud́ıž pro řešeńı mého problému mi vystač́ı použ́ıvat

    DOM. Co se týká zmı́něné bezpečnosti, bude vhodné data ukládat v šifrované podobě apři nač́ıtáńı je dešifrovat. Nemysĺım si, že je nezbytně nutné použ́ıt silné šifrováńı náročné navýpočetńı výkon. Jde mi sṕı̌se o to, vyfiltrovat možnost pouhého otevřeńı souboru v textovémrežimu a źıskáńı tak veškerých přihlašovaćıch údaj̊u. Pro názorněǰśı představu jsem vytvořilmodel př́ıpad̊u užit́ı, který je zobrazen na následuj́ıćım obrázku 3.2.

    Obrázek 3.2: Model př́ıpad̊u užit́ı přihazovaćıho programu

    Podle možnost́ı a času bych dále aplikaci rozš́ı̌ril o daľśı schopnosti, jenž by z ńı udělalymohutněǰśı nástroj na spravováńı aukćı na eBay. Budu dávat přednost funkcionalitám, kterébudou data z eBay źıskávat a zpracovávat, nikoliv dodávat.

    1Strom nebude obsahovat v́ıce jak 20 uzl̊u.

  • 3.1. PROGRAMOVACÍ JAZYK 9

    3.1 Programovaćı jazyk

    Hledáńı relevantńıch informaćı o eBay mě zavedlo na pro mě určitě nejhodnotněǰśıstránky eBay Developers Programu[5]. Neváhal jsem a po bezplatné registraci se připojil dovývojářského centra2. Prvńı rozhodnut́ı, které jsem musel učinit, se týkalo programovaćıhojazyka, v kterém budu implementovat řešeńı své bakalářské práce. Důležitá pro mě bylaznalost jazyka a jeho multiplatformnost. Developerský program eBay nab́ıźı podporu protato implementačńı prostřed́ı 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)

    Hlavńı roli v mém rozhodnut́ı hrály osobńı zkušenosti s danými programovaćımi jazyky.Největš́ı zkušenosti mám s programovaćım jazykem Java, o řád menš́ı potom s PHP aJavaScriptem. Pro Javu jsem se rozhodl z několika daľśıch d̊uvod̊u. Jedńım z rozhoduj́ıćıchfaktor̊u byla možnost stáhnout kompletńı software developement kit (SDK) pro Javu včetnědokumentace. Daľśı výhodou Javy oproti PHP či JavaScriptu je fakt, že pro běh aplikace neńınutné mı́t nainstalovaný a funkčńı aplikačńı server. V neposledńı řadě Java nab́ıźı možnostvytvořeńı spustitelného jar archivu. K vývoji programu je ovšem potřeba mı́t nainstalovanéJDK[11] ve verzi 1.6 update 3 nebo vyšš́ı, ke spuštěńı pak JRE[11] a pochopitelně vlastnitzař́ızeńı připojené k internetu.

    3.2 Použité prostřed́ı pro tvorbu

    Vzhledem k podmı́nce fungováńı programu v linuxovém prostřed́ı jsem se rozhodl imple-mentovat v Ubuntu 9.10 the Karmic Koala. Jako IDE jsem si vybral Eclipse 3.5 SR2, kterédostatečně vyhovuje požadavk̊um pro vývoj, testováńı i běh programu.

    2Doporučuji se registrovat, źıskáte t́ım automaticky vygenerovaná ID a tokeny potřebné pro testováńı aběh aplikace

  • 10 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ

  • Kapitola 4

    Realizace

    V této kapitole se zaměř́ım na popis implementace se zaměřeńım na nestandardńı částiřešeńı, poněvadž aplikace je rozsáhlá a přijde mi nevhodné popisovat řekněme

    ”standardńı“

    součásti programu jako např. GUI nebo vysvětlovat rozš́ı̌rené funkce programu oproti zadáńı,které jsem se dobrovolně rozhodl implementovat. Dále odkazuji do kapitoly Úvod konkrétnědo bodu 1.2 Princip online aukce na vysvětleńı typ̊u aukćı eBay a jejich možnými kom-binacemi, nebot’ jsou tyto informace nezbytné pro pochopeńı samotného kódu a použitýchvýraz̊u v této kapitole.

    4.1 Implementace využ́ıvaj́ıćı eBay API

    Program je navržen s využit́ım eBay API, v době psańı tohoto textu v posledńı verzi665. eBay API se skládá z několika d́ılč́ıch API, které spravuj́ı svou určitou oblast, pracuj́ı nar̊uzných protokolech a podporuj́ı r̊uzné formáty dat. eBay označuje množinu podporovanýchAPI jako eBay Web Services. Tato množina se potom děĺı do pěti podmnožin, jimiž jsouSearch, Selling, Buying, Users a Alerts. Jednotlivé podmnožiny pak obsahuj́ı konkrétńıAPI. Pro představu uvedu některé z nich spadaj́ıćı do výše zmı́něných skupin.

    V podmnožině Search je to např.

    • Finding API umožňuj́ıćı vyhledávat položky na eBay,

    v Selling:

    • Trading API zajǐst’uj́ıćı autentizovaný př́ıstup k soukromým dat̊um na eBay a spravuj́ı-ćı prodejńı management,

    • Research API zprostředkovávaj́ıćı historické informace o eBay,

    v Buying:

    • Shopping API, které slouž́ı na vyhledáváńı produkt̊u, ovšem na rozd́ıl od FindingAPI je optimalizován na rychlost, použitelnost a menš́ı objem přenášených dat propř́ıstup k veřejným read-only dat̊um na eBay ve světě Web 2.0,

    11

  • 12 KAPITOLA 4. REALIZACE

    v Users:

    • Feedback API poskytuj́ıćı správu uživatelských účt̊u

    a v Alerts:

    • Server Notification API poskytuj́ıćı serverové oznámeńı vhodné pro aplikace servero-vého typu, jenž mohou těmto notifikaćım z eBay naslouchat.

    Pro komunikaci s eBay API se využ́ıvá protokol HTTP (kromě Trading API, kde se využ́ıvázabezpečený HTTPS protokol v požadavku POST) v požadavćıch GET(REST[17]) a POST.Pro formát dat se využ́ıvá XML, SOAP[19] a JSON[12].

    Protože jednotlivé API jsou značně rozsáhlé a vydaly by na celou knihu, jsou popsánydetailněji pouze ty, které jsou v aplikaci prakticky využity a pro źıskáńı daľśıch informaćıodkazuji[1] na detailńı popis a dokumentaci k jednotlivým API na internetových stránkácheBay Developers Programu.

    4.2 Přihlášeńı do systému

    Celý program pracuje jako celek a autentizuje se v̊uči eBay Trading Web Services zabezpe-čeným HTTPS protokolem. Tud́ıž je zapotřeb́ı mı́t registrovaný účet na eBay, ale také v eBayDevelopers Programu, jejichž účty jsou vzájemně propojeny. Účet v eBay Developers Pro-gramu poskytuje DeveloperID, ApplicationID, CetrificateID na základě nichž se vygenerujeeBay token. Ten je následně použit pro veškerou daľśı komunikaci a má časově omezenou dobutrváńı, řádově asi rok. Všechny tyto identifikačńı údaje lze také plně využ́ıt pro připojeńıdo testovaćıho prostřed́ı eBay Developers Program Sandbox, kde je možno virtuálně spravo-vat sv̊uj

    ”mini“ eBay. Podle toho se lǐśı i přihlašovaćı údaje, viz Dodatek B. Pokud byla

    v́ıcekrát zadána špatná kombinace přihlašovaćıho jména a hesla, může se server dotázatna tzv. CAPTCHA. T́ım se snaž́ı předcházet slovńıkovému útoku. Následuj́ıćı úsek kódupopisuje přihlášeńı 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");

  • 4.2. PŘIHLÁŠENÍ DO SYSTÉMU 13

    this.account.setDeveloper("developerID");

    this.account.setApplication("applicationID");

    this.account.setCertificate("certificateID");

    this.apiCred.seteBayToken("token");

    Ve skutečnosti t́ımto zp̊usobem neprob́ıhá žádné přihlašováńı. Pouze se do proměnnéapiContext nastavuj́ı veškeré přihlašovaćı údaje a adresy. Proměnná apiContext se použ́ıvápro všechnu komunikaci se serverem. API pak dále zajist́ı zvoleńı názvu služby, ke kterépřistupujeme. Vlastńı autorizace je provedena při prvńı komunikaci se serverem, odpadá taknutnost autorizováńı se při každé výměně dat.

    Obrázek 4.1: Model nasazeńı přihazovaćıho programu

    Na obrázku 4.1 se nacháźı zjednodušený model nasazeńı. Zjednodušený proto, že se naněm nevyskytuj́ı všechny API, s kterými program komunikuje, ale pouze ty nejpouž́ıvaněǰśı.Je tomu tak z d̊uvodu přehlednosti a názornosti, poněvadž se všemi ostatńımi API komu-nikuje taktéž přes HTTP protokol.

    4.2.1 Struktura XML

    Program ukládá přihlašovaćı údaje do souboru ve formátu XML, jehož stromová struk-tura je zobrazena ńıže. Tř́ıda StringEncrypter zašifrovává hodnoty uzl̊u Developer, Appli-cation, Certificate a Token, přičemž ostatńı položky šifrovány nejsou. Použit je open sourcealgoritmus Base64 s veřejným kĺıčem a 8 bytovou soĺı, který má tu výhodu, že výslednýzakódovaný řetězec se skládá z tisknutelných znak̊u ASCII, a proto jej mohu zapsat do XMLsouboru. Při nahráváńı přihlašovaćıch údaj̊u jsou dané položky zpět dešifrovány.

  • 14 KAPITOLA 4. REALIZACE

    Stromová struktura XML souboru:

    https://api.ebay.com/wsapi

    https://api.ebay.com/ws/api.dll

    https://signin.ebay.com/ws/eBayISAPI.dll?SignIn

    Celý proces uložeńı přihlašovaćıch údaj̊u do XML souboru je názorně popsán sekvenčńımdiagramem (Obrázek 4.2). Uživatel se rozhodne uložit své údaje, vybere si absolutńı cestu,kam je chce uložit, urč́ı název souboru a stiskne tlač́ıtko v GUI. To vyvolá akci, v ńıžtř́ıda Saver1 nasetuje uživatelem zadané přihlašovaćı údaje do proměnných a předá jetř́ıdě StringEncrypt k zašifrováńı. Zašifrované údaje jsou předány tř́ıdě XML Builder, kterávytvoř́ı výše zmı́něný stromový model XML souboru a zaṕı̌se do něho zašifrované hodnoty.Takto vytvořený model je uložen do XML souboru se zvoleným názvem a absolutńı ces-tou. Nakonec je uživatel informován o proběhnuté akci zobrazeńım dialogového okna v GUI.Načteńı přihlašovaćıch údaj̊u ze souboru funguje analogicky.

    1Názvy tř́ıd nekoresponduj́ı přesně s názvy tř́ıd v implementaci z d̊uvodu přehlednosti a názornosti dia-gramu.

  • 4.3. ZÍSKÁNÍ INFORMACÍ O POLOŽCE NA EBAY 15

    Obrázek 4.2: Sekvenčńı diagram uložeńı přihlašovaćıch údaj̊u do XML souboru

    4.3 Źıskáńı informaćı o položce na eBay

    Po přihlášeńı a výběru akce z hlavńıho menu je v převážné většině nutné zadat item IDdané položky, o ńıž chce uživatel zjistit určité informace. Proto je vhodné vědět, kde je možnéitem ID nalézt a jak s ńım program dále pracuje. Item ID je jednoznačný identifikátor položkyna eBay označený jako Item number, což je dvanáctimı́stné č́ıslo. Toto č́ıslo je zobrazeno ukaždé aukce na eBay, viz Obrázek 4.3 zakroužkováno červeně.

    Po zadáńı správného item ID program zobraźı informace o dané položce. K źıskáńı dat sevyuž́ıvá tř́ıda z eBay Trading API GetItemCall, které se do konstruktoru předá apiContext.Metoda této tř́ıdy getItem(itemID) vraćı data v objektu typu ItemType. K takto źıskanýmdat̊um lze přistupovat voláńım jednotlivých get metod, jak je zřejmé z následuj́ıćıho úsekukódu. Źıskané hodnoty se potom zobraźı v jednotlivých textboxech př́ıpadně tabulkách vGUI 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ázek 4.3: Źıskáńı tzv. Item number u položky na eBay

    4.4 Přihozeńı

    Podle zadaného item ID program rozhodne, o jaký typ aukce se u dané položky jedná t́ım,že se zavolá metoda z eBay Trading API getListingType().value(), která do proměnnétypu String auktionType ulož́ı hodnotu typu aukce.

    String auctionType = item.getListingType().value();

    Metoda getListingType().value() vraćı tyto hodnoty:

    • Chinese pro”přihazovaćı“ typ aukce

    • FixedPriceItem pro aukce typu Buy It Now

    Pro zjǐstěńı, zda daná aukce nab́ıźı možnost vytvořit vlastńı nab́ıdku, tzv. BestOffer,slouž́ı metoda getBestOfferDetails(), která do objektu tř́ıdy BestOfferDeatilsTypeulož́ı informace ohledně BestOffer aukci nebo null. Pokud objekt neńı null, zavolá se metodaisBestOfferEnabled(), která do proměnné typu String bestOffer ulož́ı hodnotu "Yes" vpř́ıpadě, že aukce podporuje BestOffer. V opačném př́ıpadě je v proměnné uložena hodnota"No".

  • 4.4. PŘIHOZENÍ 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ř́ıpadně kombinaci typ̊u aukćı se jednáa zpř́ıstupńı uživateli daľśı možnosti resp. tlač́ıtka, co lze s aukćı provést2 a nastav́ı takéomezeńı na finálńı cenu a kvantitu, kdy pro Snipe muśı být nastavena výše finálńı částkyvětš́ı, než je ta současná, pro Buy It Now muśı být nastavená přesně Buy It Now Price částkazjǐstěná pro danou položku a v Best Offer zálež́ı na uživateli, jakou částku nab́ıdne. Kvantitamuśı být celoč́ıselná a vždy menš́ı nebo rovna kvantitě daného zbož́ı na eBay.

    Obrázek 4.4: Okno zobrazuj́ıćı přihazovaćı menu

    2Názvy tlač́ıtek koresponduj́ı s názvy typ̊u aukćı v anglické verzi eBay, tedy Buy It Now, Best Offer a proChinese aukci je to tlač́ıtko Snipe.

  • 18 KAPITOLA 4. REALIZACE

    Tlač́ıtkem Get IP se program pokuśı źıskat IP adresu poč́ıtače, na němž je spuštěn.IP adresa se zjǐst’uje posláńım POST požadavku na internetovou stránku whatismyip.com,uloženou v proměnné strUrl, metodou executeMethod(post). Metoda getResponseBodyAsString() vraćı odpověd’ na požadavek, tedy pokud vše proběhne bez chyb, IP adresuve formátu String. V př́ıpadě chyby se zachyt́ı výjimka. Metoda releaseConnection()nakonec

    ”uvolńı“ spojeńı.

    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ř́ı źıskat IP adresu, je nutné, aby ji uživatel zadal ručně. V tomtopř́ıpadě je kontrolována validita IP adresy metodou validateIpAdress(String), které sejako parametr předá proměnná typu String - ona IP adresa, a která metodou matches()porovná podle regulárńıho výrazu vstupńı IP adresu a vyhodnot́ı jej́ı validitu. Regulárńıvýraz kontroluje, zda se mezi třemi tečkami nacháźı minimálně jedna, maximálně tři celoč́ıselnéhodnoty v uzavřeném intervalu nula až devět.

    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é údaje jsou připraveny ke zpracováńı, tedy přihozeńı 4.4.1, koupi 4.4.2 nebovytvořeńı nejlepš́ı nab́ıdky 4.4.3.

    4.4.1 Klasická přihazovaćı aukce

    4.4.1.1 Vytvořeńı nab́ıdky a přihozeńı

    Před samotným přihozeńım je nutné vytvořit nab́ıdku. K tomu slouž́ı objekt offer tř́ıdyOfferType, kterému se nastav́ı tři hodnoty. Těmi jsou částka, která má být přihozena, kvan-tita zbož́ı, které chceme koupit a typ aukce. Částku i kvantitu určil uživatel, proto se meto-dami offer.setMaxBid(amount) respektive offer.setQuantity(item.getFinalQuantity())

  • 4.4. PŘIHOZENÍ 19

    źıská, přičemž částka neńı typu Integer nebo Double, jak by se mohl čtenář domńıvat, aleobaluje ji tř́ıda AmountType. Objektu amount této tř́ıdy muśı být nastavena měna stejná, jakoje měna kupované položky, což se zaruč́ı metodami amount.setCurrencyID(item.getCurrency()). Pro dokončeńı nastaveńı nab́ıdky je nutné specifikovat typ aukce metodou offer.setAction(BidActionCodeType.BID). V tomto př́ıpadě konstanta BID určuje klasickou přiha-zovaćı aukci neboli Chinese auction.

    Nyńı je vytvořena nab́ıdka. Dále je však nutné vytvořit požadavek přihozeńı. K tomuslouž́ı tř́ıda z eBay Trading API PlaceOfferCall, které se jako parametr do konstruk-toru předá několikrát zmı́něný apiContext. Objektu pf tř́ıdy PlaceOfferCall se nastav́ımetodou pf.setItemID(String.valueOf(item.getItemId())) item ID položky a metodoupf.setEndUserIP(item.getIpAddress()) IP adresa koncového zař́ızeńı. Metoda pf.setBlockOnWarning(false) určuje, zda se při varováńı má - hodnota true nebo nemá - hodnotafalse blokovat posláńı nab́ıdky. Nakonec se požadavek přihozeńı odešle metodou pf.placeOffer().

    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áńı aukćı

    Dle zadáńı má program monitorovat v́ıce aukćı současně a přihodit zadanou částku vposledńıch pěti vteřinách před koncem aukce. Jak je toho doćıleno, bude popsáno v tétopodkapitole. Základem je synchronizovaná kolekce tasks, která obsahuje veškerá data omonitorovaných aukćıch. Synchronizovaná je proto, aby jej́ı operace prob́ıhaly atomicky.

    Samotné monitorováńı prob́ıhá ve vlákně, které běž́ı v nekonečném while cyklu. Vláknoje metodou Thread.sleep(1000) po vteřině uspáváno, přičemž s každou uplynuvš́ı vteřinouse zvýš́ı o jedničku proměnná counter typu long. Podle hodnoty této proměnné docháźı kpravidelným aktualizaćım dat monitorovaných položek co dvě minuty, což zajǐst’uje podmı́nkaif (counter % 120 == 0) a vytvořeńı nového vlákna new RefreshThread(tasks.get(i)).start(), které automaticky źıská a ulož́ı aktuálńı data o všech položkách v kolekci3. Podmı́nkaif(counter == Long.MAX VALUE) slouž́ı k ošetřeńı situace, že dojde k přetečeńı rozsahutypu Long.

    3Źıskáńı dat o položce bylo popsáno v kapitole 4.3.

  • 20 KAPITOLA 4. REALIZACE

    4.4.1.3 Vyhodnoceńı času přihozeńı

    Pro všechny prvky kolekce se zjist́ı přesné datum konce aukce s pěti sekundovým předstihemmetodou new Date(tasks.get(i).getEndTime().getTime() - 5000), která ho ulož́ı donového objektu endDate typu Date. Čas konce aukce je v podmı́nce if(endDate.before(date)&& tasks.get(i).isFinished() == false) porovnáván s aktuálńım časem. Pokud je pod-mı́nka splněna, označ́ı se aukce metodou tasks.get(i).setFinished(true) jako skončená,aby neproběhlo opětovné přihozeńı a v podmı́nce if(tasks.get(i).getFinalPrice().compareTo(tasks.get(i).getCurrentPrice()) == 1) se vyhodnocuje, zda nastavená finálńı hod-nota ceny př́ıhozu je větš́ı než aktuálńı cena položky. Pokud ano, vytvoř́ı se nové vlákno newSnipeThread(tasks.get(i)).start(), které provede přihozeńı, dle nastavených parametr̊u.Pokud neńı splněna podmı́nka, neńı uživatel nijak upozorněn, že program nepřihodil a toproto, at’ neńı obtěžován vyskakuj́ıćımi okny apod. Pouhým zkontrolováńım výsledku aukcepozná, že finálńı hodnota částky přihozeńı je vyšš́ı, než byla j́ım nastavená hodnota, tud́ıžnebylo možné aukci vyhrát.

    private static List tasks =

    Collections.synchronizedList(new LinkedList());

    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;

    }

    }

    }

  • 4.4. PŘIHOZENÍ 21

    4.4.1.4 Zrušeńı monitorované aukce

    Aby nedocházelo k časově závislým chybám, je položka, kterou chce uživatel smazatz monitorovaných aukćı, nejdř́ıve přidána metodou toDelete.add(tasks.get(index)) dokolekce toDelete a až mimo for cyklus zmı́něný výše smazána metodou tasks.removeAll(toDelete). Pokud by se ono mazáńı položky vyskytovalo uvnitř for cyklu, došlo by k náhlézměně hodnoty tasks.size() omezuj́ıćı počet iteraćı cyklu a nastala by výjimka.

    private static List toDelete = new ArrayList();

    public void removeFromTasksList(int index) {

    toDelete.add(tasks.get(index));

    }

    4.4.1.5 Názorný popis celého procesu přihozeńı

    Jak prob́ıhá celý postup od spuštěńı aplikace až po přihozeńı částky popisuje itera-tivně obrázek 4.5. Po přihlášeńı uživatele se zjist́ı informace o položce, vytvoř́ı se nab́ıdkazadáńım hodnoty ceny, která má být přihozena. Pokud je vše nastavené správně, dojde kpotvrzeńı nab́ıdky a jej́ımu přihozeńı. Pokud přihozeńı proběhlo bez chyb, oznámı́ se nejvyšš́ıpřihazuj́ıćı.

    Obrázek 4.5: Bussiness model přihozeńı

  • 22 KAPITOLA 4. REALIZACE

    4.4.2 Koupě položky za fixńı cenu

    Koupě položky za fixńı cenu se oproti klasické přihazovaćı aukci lǐśı pochopitelně v typunastavené aukce. V tomto př́ıpadě je potřeba změnit BidActionCodeType na PURCHASE.Dále se muśı nastavit přesně určená hodnota ceny Buy It Now položky na eBay. Metodamiamount.setValue(item.getBuyItNowPrice()) se do objektu amount tř́ıdy AmountTypeulož́ı hodnota této ceny, aby se následně mohla vytvořit nab́ıdka metodou setMaxBid(amount).Nastaveńı IP adresy, měny, kvantity a ID kupované položky z̊ustává stejné jako v př́ıpaděklasické přihazovaćı aukce.

    offer.setAction(BidActionCodeType.PURCHASE);

    AmountType amount = new AmountType();

    amount.setValue(item.getBuyItNowPrice());

    OfferType offer = new OfferType();

    offer.setMaxBid(amount);

    4.4.3 Posláńı nejlepš́ı nab́ıdky

    Vytvořeńı nejlepš́ı nab́ıdky se oproti koupi položky za fixńı cenu lǐśı pochopitelně v typunastavené aukce. V tomto př́ıpadě je potřeba nastavit BidActionCodeType na OFFER. Nas-taveńı ostatńıch hodnot je stejné.

    offer.setAction(BidActionCodeType.OFFER);

    4.5 Posláńı požadavku PlaceOffer

    EBay Developers Program poskytuje na svých stránkách testovaćı prostřed́ı eBay APItzv. API Test Tool[20], kde je developer̊um umožněno testovat jednotlivá API a jejich metodya to jak pro sandbox tak i pro produkčńı verzi eBay. Práce s tř́ıdou PlaceOffer, která se staráo vytvořeńı a přihozeńı nab́ıdky, už byla popsána v kapitole 4.4. Nyńı bude vysvětleno, jakprob́ıhá komunikace. Ćılový poč́ıtač4 pośılá HTTP POST požadavek eBay serveru. HTTPpožadavek ze skládá z HTTP hlavičky a těla v XML formátu (oněch vytvořených dat).

    4.5.1 Struktura HTTP hlavičky

    HTTP hlavička se skládá z atribut̊u X-EBAY-API-COMPATIBILITY-LEVEL označuj́ıćı verzieBay API, X-EBAY-API-DEV-NAME, X-EBAY-API-APP-NAME a X-EBAY-API-CERT-NAME, kteréobsahuj́ı Developer ID, Application ID a Certificate ID, X-EBAY-API-SITEID udávaj́ıćı kódstátu5 a atribut X-EBAY-API-CALL-NAME, který určuje název požadavku.

    4Ćılovým poč́ıtačem je myšleno koncové zař́ızeńı uživatele.5V ukázce je hodnota 0, která označuje stránky eBay náležej́ıćı Spojeným stát̊um americkým.

  • 4.5. POSLÁNÍ POŽADAVKU 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žadavku

    Tělo HTTP požadavku obsahuje XML data. Jak si může pozorný čtenář všimnout, jsouto právě ta data, jejichž vytvořeńı bylo popsáno v kapitole 4.4. Uzel RequesterCredentialsrespektive jeho potomek eBayAuthToken obsahuje token uživatele. Zde je vidět, že k datovékomunikaci stač́ı opravdu pouze token a neńı nutné se znovu autorizovat v̊uči eBay serveru,jak již bylo zmı́něno v kapitole 4.2. Uzel Offer tedy jeho potomci obsahuj́ı data vztahuj́ıćıse ke konkrétńımu požadavku př́ıhozu6. Hodnota v uzlu Action určuje druh aukce po-dle těchto kĺıčových slov: Bid|Purchase|Accept|Counter|Decline|Offer. V uzlu MaxBidje nastavena hodnota částky přihozeńı, v uzlu Quantity pak kvantita kupovaného zbož́ı.Uzel UserConsent obsahuje kĺıčová slova true|false, které v př́ıpadě, že daná položkavyžaduje potvrzeńı licenčńıch práv, popisuj́ı, zda s nimi uživatel souhlaśı či nikoliv. UzelMessage umožňuje poslat zprávu prodejci ve formátu String. Pokud aukce podporuje ivytvořeńı nejlepš́ı nab́ıdky, může se v požadavku vyskytnout uzel BestOfferID, označuj́ıćıID této nab́ıdky. Posledńı zmı́něné tři uzly jsou pouze volitelné, zat́ımco všechny ostatńı jsouvyžadovány. Uzel ItemID nese informaci o ID položky a uzel EndUserIP obsahuje IP adresućılového zař́ızeńı.

    Bid|Purchase|Accept|Counter|Decline|Offer

    AmountType

    int

    boolean

    string

    string

    Na konkrétńı požadavek v př́ıpadě, že nenastane chyba, pošle API následuj́ıćı odpověd’.O úspěchu komunikace informuje uzel Ack svoj́ı hodnotou Success. Uzel Timestamp infor-

    6Za přihozeńı se považuje i koupě položky za fixńı cenu a vytvořeńı nejlepš́ı nab́ıdky. Neńı to sicepřihazováńı v pravém slova smyslu, ale jedná se o jednorázové přihozeńı.

  • 24 KAPITOLA 4. REALIZACE

    muje o času posláńı odpovědi na požadavek, uzly Version a Build označuj́ı aktuálńı verzia vývojové sestaveńı API. Uzel SellingStatus informuje o stavu prodeje. Atributy uzl̊uConvertedCurrentPrice a CurrentPrice currencyID informuj́ı o druhu měny a výši hod-noty současné ceny v aukci. Uzel HighBidder respektive jeho potomek UserID označuje IDaktuálńıho nejvyšš́ıho přihazuj́ıćıho a uzel MinimumToBid udává minimálńı hodnotu daľśıhopř́ıhozu v dané měně.

    2010-05-22T23:53:28.571Z

    Success

    665

    E665_CORE_BUNDLED_11160767_R1

    MTMyOTgxNjM3LzE0NzUxOw**

    10.0

    10.0

    testuser_ondras

    10.5

    V př́ıpadě chyby se v uzlu Ack vraćı hodnota Failure a uzel Errors s jeho potomkyShortMessage, LongMessage, ErrorCode, SeverityCode a ErrorClassification popisujedetailně chybové hlášeńı.

    Failure

    Please specify a query!

    Please specify a query!

    10.1

    Error

    RequestError

    Pro uceleńı poznatk̊u o posláńı nab́ıdky a pr̊uběhu komunikace ćılového poč́ıtače s eBayTrading API odkazuji[14] na referenčńı př́ıručku.

  • Kapitola 5

    Testováńı

    Celou aplikaci bylo nutné pokrýt jednotkovými testy a testy grafického uživatelskéhorozhrańı. Pouze s t́ım jsem se však nespokojil a vytvořil jsem dotazńık, který jsem společněs programem rozeslal skupině1 lid́ı k testováńı. Spektrum osob, které mou aplikaci testovalo,jsem se snažil vybrat co neǰsirš́ı. Od naprostých laik̊u, až po kolegy znalé softwarovýchtechnologíı, od mladš́ıch až po osoby středńıho věku. Tuto metodu testováńı jsem zvolil zd̊uvodu objektivnosti a r̊uzných nárok̊u jednotlivých uživatel̊u a pak také proto, abych mohlpružně reagovat na opravu chyb, doděláńı nedostatk̊u apod.

    5.1 Jednotkové testy

    Jednotkové neboli unit testy pokrývaj́ı bussiness logiku programu. Testovat bussinesslogiku eBay API je kontraproduktivńı, poněvadž součást́ı zdroj̊u jsou Perf testy a Sanitytesty, které pokrývaj́ı celé eBay API. Testoval jsem proto pouze vlastńı kód. Na př́ıkladuuvád́ım unit test šifrováńı, kdy v proměnné encode je text, který se má zašifrovat a vproměnné expectedCorrectResult je očekávaný text po zašifrováńı. Na objektu tř́ıdy StringEncrypter se zavolá metoda encrypt(String), která má být t́ımto unit testem pokryta, akteré se předá jako parametr obsah proměnné encode, tedy text k zašifrováńı. Zašifrovanýtext se ulož́ı do proměnné encrypted, která se porovnává v metodě assertEquals(String,String) na rovnost s proměnnou expectedCorrectResult, v ńıž je očekávaný výsledek pozašifrováńı.

    @Test

    public void testEncrypt() {

    StringEncrypter encrypter = new StringEncrypter();

    String encode = "123456abcdEFGH";

    String expectedCorrectResult = "RSoGc1TNhZlfUO5ZxcKI6g==";

    String encrypted = encrypter.encrypt(encode);

    assertEquals(encrypted, expectedCorrectResult);

    }

    1Skupinou zde rozumı́m 10 tester̊u

    25

  • 26 KAPITOLA 5. TESTOVÁNÍ

    Ukázka popisuje očekávaný výstup, ale dále se testuj́ı chybové stavy, nepovolené, mezńı,nedefinované, minimálńı a maximálńı hodnoty, prázdná a neúplná vstupńı data apod.

    5.2 Testy grafického uživatelského rozhrańı

    GUI testy, jak už z jejich zkratky vypov́ıdá, testuj́ı grafické uživatelské rozhrańı programu.K tomuto účelu je použit framework UISpec4J[9], který napomáhá testováńı GUI Javaaplikaćı založených na Swingu2.

    5.2.1 Mockováńı objekt̊u

    Technika zvaná mockováńı objekt̊u se snaž́ı řešit závislost testovaného kódu na ostatńımkódu tak, že závislost je nahrazována modelovými implementacemi tzv. mock objekty. Tytoobjekty jsou propojeny s testovaným kódem, a tak lze tento kód testovat tzv. zevnitř.Nahrazeńım závislosti mock objekty je zaručena izolovanost testu v̊uči ostatńımu kódu.

    Ve tř́ıdě DialogGeteBayOfficialTimeCallMock se nacháźı metoda geteBayOfficialTime(), která vraćı instanci tř́ıdy typu Calendar. Instance tohoto objektu je právě mockobjektem, s kterým se potom dále pracuje.

    public class DialogGeteBayOfficialTimeCallMock extends GeteBayOfficialTimeCall {

    @Override

    public Calendar geteBayOfficialTime() throws Exception {

    return Calendar.getInstance();

    }

    }

    V metodě testGeteBayOfficialTime() se testuje správné zobrazeńı źıskaných dat, vtomto př́ıpadě oficiálńıho času eBay a výskyt komponent knihovny Swing. Jelikož oficiálńıčas eBay se neustále měńı a účelem neńı testovat, zda správně funguje źıskáváńı času zeserveru eBay, je zde použit právě onen vytvořený mock objekt, tedy instance tř́ıdy Calendar.T́ım se doćıĺı pouze testováńı GUI, což je v tomto př́ıpadě požadavkem. Vytvoř́ı se objektmock, který je instanćı tř́ıdy DialogGeteBayOfficialTimeCallMock. Na tomto objektu sezavolá výše zmı́něná metoda geteBayOfficialTime(), jej́ıž návratová hodnota se ulož́ı doproměnné expected.

    Framework UISpec4J je využit k testováńı výskytu grafických komponent Swingu. Tes-tuje se, zda se na komponentě Panel vyskytuje komponenta TextBox, a komponenta Buttons daným názvem.

    Komponentě TextBox se metodou setText(String) nastav́ı obsah proměnné expected,což se projev́ı zobrazeńım źıskaného času (mock objektu) v dané komponentě. Potom se za-volá metoda getText(), která źıská zobrazený čas a ulož́ı jej do proměnné showed. Proměnnéexpected a showed porovnáme metodou assertEquals(String, String) na rovnost a t́ımse zjist́ı, zda čas, který byl předán komponentě TextBox se zobrazil správně.

    2Knihovna Swing poskytuje aplikačńı rozhrańı pro tvorbu a obsluhu klasického grafického uživatelskéhorozhrańı na platformě Java.

  • 5.3. PRAKTICKÉ TESTOVÁNÍ TESTERY 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é testováńı testery

    Za nejd̊uležitěǰśı považuji praktické otestováńı aplikace v reálném provozu. Proto jsemsv̊uj program uvolnil k veřejnému testovańı. S ćılem źıskat co nejv́ıce relevantńıch dat ainformaćı, vytvořil jsem dotazńık, v němž bylo položeno následuj́ıćıch osm otázek:

    1 Je instalačńı a uživatelský manuál srozumitelný?

    2 Podařilo se Vám bez problémů spustit program?

    3 Přihlásili jste se bez problému přes program na eBay?

    4 Je grafické uživatelské prostřed́ı přehledné a srozumitelné?

    5 Funguje program správně? Pokud ne, co je špatně?

    6 Nastal nějaký problém během testováńı?”Pád“ programu,

    ”zaseknut́ı“ apod.?

    7 Přihodil program finálńı částku ve správný čas?

    8 Nezatěžovala aplikace př́ılǐs poč́ıtač?

    V implementaci programu je použita vlastńı konfigurace pluginu Apache Log4J, kterýslouž́ı k výpisu chybových (i jiných) hlášeńı do souboru log4j.log. Vyžádal jsem si prototento soubor spolu s vyplněným dotazńıkem od jednotlivých tester̊u, abych mohl přesněidentifikovat a opravit chyby.

  • 28 KAPITOLA 5. TESTOVÁNÍ

    5.3.1 Výsledky testováńı

    Výsledky jsem zpracoval do přehledného grafu:

    Obrázek 5.1: Graf výsledk̊u dotazńıku

    U otázek 5 a 6 se vyskytly následuj́ıćı slovńı odpovědi (uvedu jen několik, protože seopakovaly): Program vykonává

    ”něco“ na pozad́ı a uživatel neńı upozorněn. Po stisknut́ı

    tlač́ıtka nastává dlouhá prodleva, než se objev́ı výsledek. Dlouhé čekáńı na dokončeńı operace.Některé labely nejsou celé korektně zobrazeny. Upravit velikost textbox̊u na vkládáńı údaj̊u.Pouze anglický jazyk. Chyb́ı varovný dialog při uzav́ırańı celé aplikace.

    Jak ukazuj́ı výsledky, jedńım z nedostatk̊u je informováńı uživatele, že prob́ıhá nějakávýpočetńı činnost a že by měl být trpělivý. Z detailněǰśıch dotaz̊u jsem se dozvěděl, že někteř́ıtesteři byli ochotni chv́ıli čekat a následně okno zavřeli, poněvadž si mysleli, že nastala bĺıženespecifikovaná chyba. Tento nedostatek jsem pružně opravil, viz 5.3.2. Daľśım z nedostatk̊u,které vyplynuly z dotazńıku, je pouze anglická lokalizace programu. Neuvědomil jsem si, ženěkteř́ı uživatelé maj́ı minimálńı nebo zcela žádný základ znalost́ı anglického jazyka. Oṕıraljsem se o skutečnost, že znalost anglického jazyka je všeobecně považována za standart.To byla chyba! Řešeńı je nasnadě - vytvořit resource bundle[16] pro můj program 5.3.3.Drobné nedostatky jako chyběj́ıćı varovný dialog při uzav́ırańı celé aplikace byly odstraněnya nebudou v této kapitole popsány.

    5.3.2 Čekaćı dialogové okno

    Vytvořil jsem nové dialogové okno, viz Obrázek 5.2, které se objev́ı pokaždé, kdy jenutné čekat na dokončeńı zpracováńı požadavk̊u uživatele. Toto okno nelze násilně zavř́ıt.T́ım je zaručeno, že uživatel neukonč́ı právě prob́ıhaj́ıćı činnost a vědomě se dočká kýženéhovýsledku.

    V kódu se to potom projevilo vytvořeńım nové tř́ıdy pojmenované Waiter.java. Vkaždé tř́ıdě, kde docháźı ke komunikaci s internetovým serverem eBay a t́ım pádem k deľśımčasovým prodlevám při zobrazeńı výsledk̊u, bylo nutné přidat tyto řádky kódu:

  • 5.3. PRAKTICKÉ TESTOVÁNÍ TESTERY 29

    Obrázek 5.2: Informačńı dialogové 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řeńı podtř́ıdy v každé takové tř́ıdě mi umožnilo elegantně oddělit grafickou částkódu a bussiness logiku, tak jak je to v aplikaćıch vhodné a účelné. Podtř́ıda se spoušt́ı vnovém vlákně paralelně se zobrazeným

    ”čekaćım“ dialogem.

    5.3.3 Resource bundle

    Správně napsaná aplikace by neměla obsahovat texty př́ımo v kódu. Proto je použitatř́ıda Messages.java, která se stará o lokalizaci podle tř́ıdy ResourceBundle, konkrétně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);

  • 30 KAPITOLA 5. TESTOVÁNÍ

    private Messages() {

    }

    public static String getString(String key) {

    try {

    return RESOURCE_BUNDLE.getString(key);

    } catch (MissingResourceException e) {

    return ’!’ + key + ’!’;

    }

    }

    }

    V kódu se pak odkazuje na texty jen pomoćı kĺıč̊u, a konkrétńı text se dohledávápodle specifikovaného Locale. Defaultńı Locale je nastaven na anglický jazyk. V souborumessages.properties jsou uloženy všechny kĺıče, které jsou pojmenovány podle tř́ıd, vnichž 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část́ı programu je pouze anglický jazyk. Rozš́ı̌reńı o daľśı lokalizace je primitivńızáležitost́ı, kdy stač́ı vytvořit nový soubor podle souboru messages.properties a pouzepřepsat hodnoty kĺıč̊u do žádaného jazyku.

    5.4 Funkčnost programu

    Program pracuje bez omezeńı v Sandbox verzi eBay. Aby byl plně funkčńı3 i v produkčńıverzi eBay, muśıte administrátora eBay požádat emailem o povoleńı aplikaci použ́ıvat, cožje podmı́něno sepsáńım smlouvy a daľśıch náležitost́ı. Každopádně se muśıte stát partneremeBay. Jinak se při přihozeńı (ostatńı funkce programu nejsou omezeny) zobraźı dialogovéokno s chybou This call, or certain logic flows within the call, are restricted to specificapplications. Tato problematika je řešena i na oficiálńım fóru eBay, a proto uvád́ım odkaz[8],kde se dočtete v́ıce, př́ıpadně př́ımo zde[15], kde jsou popsány detaily a podmı́nky.

    5.5 Zhodnoceńı testováńı

    Testováńı mi pomohlo odhalit chyby, či drobné nedostatky, které jsem v pr̊uběhu vývojepostupně odstranil a umožnilo mi lépe pochopit sv̊uj vlastńı kód. Současně přispělo k lepš́ımunávrhu aplikace či př́ıpadnému refaktorováńı již implementovaného zdrojového kódu.

    3T́ım mám na mysli, aby fungovalo přihozeńı.

  • Kapitola 6

    Závěr

    Implementováńım programu jsem splnil požadavky na jednoduchý přihazovaćı programna eBay. Jelikož jsem použil eBay API, bylo možné rozš́ı̌rit funkčnost programu nad rámeczadáńı o vyhledáváńı položek na eBay, zobrazeńı a smazáńı zpráv uživatele, zjǐstěńı informaćıo uživateli a daľśı. Implementoval jsem rovněž grafické uživatelské prostřed́ı. K automa-tickému ukládáńı a nač́ıtáńı přihlašovaćıch údaj̊u slouž́ı XML soubor, do kterého jsou dataz d̊uvodu bezpečnosti šifrována. Všechny funkce jsou pokryty jednotkovými testy a grafickéuživatelské prostřed́ı je otestováno s pomoćı frameworku UISpec4J. Za výhodu považuji, žeje aplikace implementována na základě eBay API, tud́ıž při vydáńı nové verze neńı nutnémodifikovat kód. T́ım je program přizp̊usoben změnám eBay.

    Jako možné pokračováńı práce bych doporučil rozš́ı̌rit funkčnost programu směrem”od

    uživatele k eBay“. T́ım mám na mysli implementaci např. vytvořeńı nové aukce, registrováńına eBay, přidáńı komentář̊u nebo obrázk̊u k aukci apod. eBay API všechny zmı́něné funkcepodporuje a př́ımo se nab́ıźı této podpory využ́ıt a implementovat kompletńı program prosprávu aukćı na eBay. Vzhledem k tomu, že mým úkolem bylo naprogramovat přihazovaćıprogram, tak jsem data o aukćıch potřeboval pouze źıskávat, a proto jsem se rozhodl imple-mentovat daľśı funkce programu pouze směrem

    ”z eBay k uživateli“. Pomoćı resource bundlu

    lze lokalizovat program do v́ıce jazykových verźı tak, jak jsem na tuto skutečnost poukazovalv kapitole testováńı. Dále by bylo vhodné obohatit funkčnost programu o uložeńı moni-torovaných aukćı před vypnut́ım programu a jejich načteńı při startu programu.

    31

  • 32 KAPITOLA 6. ZÁVĚR

  • Literatura

    [1] eBay Web Services Overview.http://developer.ebay.com/products/overview, stav z 3. 5. 2010.

    [2] Online aplikace pro nakupováńı přes 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áńı na eBay.http://www.ebayaukce.cz, stav ze 5. 3. 2010.

    [4] eBay: Mezinárodńı obchodńı portál.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álńı stránky eBay.http://www.ebay.com, stav z 5. 3. 2010.

    [7] Rozš́ı̌reńı 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] Úvod do JSON.http://www.json.org, stav z 3. 5. 2010.

    33

    http://developer.ebay.com/products/overviewhttp://www.auctionsniper.comhttp://www.esnipe.comhttp://www.bidnapper.comhttp://www.ebayaukce.czhttp://www.eim.ebay.czhttp://developer.ebay.comhttp://www.ebay.comhttps://addons.mozilla.org/en-US/firefox/addon/5202https://addons.mozilla.org/en-US/firefox/addon/5571http://dev-forums.ebay.com/thread.jspa?threadID=500005636&message ID=500017584http://dev-forums.ebay.com/thread.jspa?threadID=500005636&message ID=500017584http://www.uispec4j.orghttp://www.jbidwatcher.comhttp://java.sun.com/javase/downloads/index.jsphttp://www.json.org

  • 34 LITERATURA

    [13] Oficiálńı stránky 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čńı př́ıručka.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é API.http://zdrojak.root.cz/clanky/rest-architektura-pro-webove-api, stav z3. 5. 2010.

    [18] ITBiz Sniffing: Odposlech datové 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.

    https://www.paypal.com/czhttp://www.moneybookers.com/app/index.pl?l=CZhttp://www.authorize.net/bidpayhttp://developer.ebay.com/devzone/xml/docs/reference/ebay/PlaceOffer .htmlhttp://developer.ebay.com/devzone/xml/docs/reference/ebay/PlaceOffer .htmlhttp://developer.ebay.com/DevZone/XML/docs/WebHelp/wwhelp/wwhimpl common/html/wwhelp.htm?context=eBay_XML_API&file=PlaceOfferCall- PlaceOffer_Best_Practices.htmlhttp://developer.ebay.com/DevZone/XML/docs/WebHelp/wwhelp/wwhimpl common/html/wwhelp.htm?context=eBay_XML_API&file=PlaceOfferCall- PlaceOffer_Best_Practices.htmlhttp://developer.ebay.com/DevZone/XML/docs/WebHelp/wwhelp/wwhimpl common/html/wwhelp.htm?context=eBay_XML_API&file=PlaceOfferCall- PlaceOffer_Best_Practices.htmlhttp://java.sun.com/developer/technicalArticles/Intl/ResourceBundleshttp://zdrojak.root.cz/clanky/rest-architektura-pro-webove-apihttp://www.itbiz.cz/sniffing-odposlech-datove-komunikacehttp://www.w3.org/TR/soaphttps://developer.ebay.com/DevZone/build-test/test-tool/Default.aspx

  • Př́ıloha A

    Seznam použitých zkratek

    API Application Programming Interface

    ASCII American Standard Code for Information Interchange

    CAPTCHA Completely Automated Public Turing test to tell Computers and HumansApart

    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 PŘÍLOHA A. SEZNAM POUŽITÝCH ZKRATEK

    SDK Software Development Kit

    SOAP Simple Object Access Protocol

    URL Uniform Resource Locator

    XML Extensible Markup Language

    ...

  • Př́ıloha B

    Instalačńı a uživatelská př́ıručka

    Požadavky programu na hardware a software

    Program ke svému běhu vyžaduje JRE[11], k vývoji JDK[11] ve verzi 1.6 update 3 nebovyšš́ı. Celý program pracuje jako celek a autentizuje se v̊uči eBay Trading Web Services.Tud́ıž je zapotřeb́ı mı́t registrovaný účet na eBay, ale také v eBay Developers Programu,jejichž účty jsou vzájemně propojeny. Účet v eBay Developers Programu poskytuje Devel-operID, ApplicationID, CetrificateID a eBay token, jenž jsou při prvńım připojeńı ověřovány.Tyto údaje lze také plně využ́ıt pro připojeńı do testovaćıho prostřed́ı eBay Developers Pro-gram Sandbox, kde je možné virtuálně spravovat sv̊uj

    ”mini“ eBay t́ım, že registrujete fiktivńı

    prodávaj́ıćı a nakupuj́ıćı.

    Daľśım požadavkem je rozlǐseńı obrazovky - doporučuji alespoň 1024 x 768 - i kdyžprogram umožňuje změnu velikosti oken. Program neńı nijak náročný na hardware. Postač́ıběžný stolńı poč́ıtač či notebook. Aplikace vytvář́ı jen minimum nových soubor̊u (pouze logydo souboru), proto nejsou velké nároky na pamět’ový prostor na pevném disku - postač́ı20MB volného mı́sta. Nutnost́ı je stálé internetové připojeńı.

    Prvńı spuštěńı programu

    Nejdř́ıve je nutné mı́t nainstalované JDK a JRE. Na přiloženém CD v adresáři /data/java/naleznete instalačńı soubory pro operačńı systémy Linux a Windows v 32 i 64 bitovýchverźıch. Pokud potřebujete stáhnout jinou verzi JDK či JRE nebo zjistit v́ıce informaćı oinstalaci, naleznete ji ke stažeńı zde[11]. V době psańı tohoto dokumentu byla aktuálńı verze1.6 u20. V tomtéž adresáři se vyskytuj́ı i licence, s kterými muśıte souhlasit, abyste mohliJDK a JRE použ́ıvat.

    V adresáři /data/jar program/ naleznete spustitelný jar archiv s programem - Ebay.jar,soubor Config.xml, který obsahuje přihlašovaćı údaje - URL k eBay. Pokud se tento souborv adresáři nevyskytne nebo je jeho obsah nesprávný, objev́ı se při spuštěńı varovné dialo-gové okno. Funkčnost programu však nijak neomeźı. Dále se v adresáři vyskytuje souborlog4j.config, který slouž́ı k výpis̊um dat do souboru a taktéž neńı jeho existence nutná.

    Po nainstalováńı prostřed́ı Javy by mělo být možné program spustit podobně jako běžný.exe soubor, tedy dvojitým kliknut́ım levého tlač́ıtka myši. Nebo je možné program spustit v

    37

  • 38 PŘÍLOHA B. INSTALAČNÍ A UŽIVATELSKÁ PŘÍRUČKA

    terminálu př́ıkazem: java -jar /cesta k souboru/Ebay.jar. Pokud vše proběhlo bez chyb, měloby se Vám zobrazit následuj́ıćı okno, viz Obrázek B.1.

    Obrázek B.1: Hlavńı okno přihazovaćıho programu

    Kliknut́ım na tlač́ıtko Config Account se Vám zobraźı okno s nastaveńım přihlašovaćıchúdaj̊u, viz Obrázek B.2. Nastavte přihlašovaćı údaje dle bodu Možnosti nastaveńı připojeńı38. Program Vás na to upozorńı v př́ıpadě, že budete cht́ıt vyvolat nějakou funkci z nab́ıdkya nebudete je mı́t nastavené. Abyste nemuseli při každém spuštěńı programu zadávat znova aznova veškeré přihlašovaćı údaje, můžete tyto údaje uložit do XML souboru a to vyvoláńımnab́ıdky File - Save Account (Obrázek B.3). Přihlašovaćı údaje se zapisuj́ı do souborušifrované, proto neńı vhodné vytvářet tento XML soubor

    ”ručně“. Při daľśım přihlášeńı stač́ı

    jen vyvolat nab́ıdku File - Load Account (Obrázek B.3) a veškeré údaje z Vámi vybranéhosouboru se rozšifruj́ı a zaṕı̌śı do programu.

    Možnosti nastaveńı připojeńı

    Program umožňuje se připojit do produkčńı verze eBay a testovaćı eBay Sandbox. Podletoho se lǐśı i přihlašovaćı údaje1.

    Pro eBay (produkčńı verze):

    1Je zřejmé, že při zadańı přihlašovaćıch údaj̊u pro produkčńı verzi eBay bude program pracovat pouzes položkami v produkčńı verzi eBay, nikoliv však s položkami v sandbox verzi. To samé intuitivně plat́ı přizadáńı přihlašovaćıch údaj̊u pro sandbox verzi eBay.

  • 39

    Obrázek B.2: Okno zobrazuj́ıćı přihlašovaćı údaje do eBay

    • DeveloperID: vaše DevID

    • ApplicationID: vaše AppID

    • Certificate: vaše CertID

    • Token: váš 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še DevID

    • ApplicationID: vaše AppID

    • Certificate: vaše CertID

  • 40 PŘÍLOHA B. INSTALAČNÍ A UŽIVATELSKÁ PŘÍRUČKA

    Obrázek B.3: Okno zobrazuj́ıćı uložeńı nebo načteńı souboru

    • Token: váš 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ěńı přihlašovaćıch údaj̊u už můžete, kliknut́ım na př́ıslušné tlač́ıtko z nab́ıdky,vyvolat jednotlivé funkce, jenž źıskávaj́ı informace z eBay. Ve většině př́ıpad̊u je nutné za-dat nejdř́ıve nějakou hodnotu jako např. item ID, text pro vyhledáváńı apod2. Pokud setak nestane, objev́ı se dialogové okno s varováńım. Ovládáńı je jinak jednoduché a veskrzeintuitivńı. Pro ukončeńı aplikace klikněte na kř́ıžek nebo v menu File - Exit.

    Popis funkce Snipe

    Jak bylo zmı́něno výše, je nejdř́ıve nutné zadat item ID k dané položce na eBay (ObrázekB.4). Poté program chv́ıli pracuje - zobraźı informativńı okno, které záměrně nelze zavř́ıt -poté zobraźı źıskané údaje o položce. Podle zadaného item ID aplikace zjist́ı, jakého typuje daná aukce a podle toho Vám zpř́ıstupńı daľśı možnosti resp. tlač́ıtka3, co lze s danou

    2Pro názornost detailně poṕı̌si ńıže funkci Snipe3Názvy tlač́ıtek koresponduj́ı s názvy typ̊u aukćı v anglické verzi eBay, tedy Buy It Now, Best Offer a pro

    Chinese aukci je to tlač́ıtko Snipe.

  • 41

    Obrázek B.4: Okno zobrazuj́ıćı přihazovaćı menu

    aukćı provést a nastav́ı také omezeńı na finálńı cenu a kvantitu. Tedy pro Snipe muśı býtnastavena výše finálńı částky větš́ı, než je ta současná, pro Buy It Now muśı být nastavenápřesně Buy It Now Price částka zjǐstěná pro danou položku a v Best Offer je na Vás, jakoučástku nab́ıdnete. Kvantita muśı být vždy menš́ı nebo rovna kvantitě daného zbož́ı na eBay.Tlač́ıtkem Get IP se program pokuśı źıskat Vaši IP adresu, pokud se mu to nepodař́ı, jenutné, abyste ji zadali ručně.

    Pokud jste vše nastavili správně, aplikace danou položku kouṕı za fixńı cenu, vytvoř́ı ne-jlepš́ı nab́ıdku a nebo přidá položku do seznamu monitorovaných položek, což se projev́ı zo-brazeńım nového okna (Obrázek B.5). V tomto okně lze ono monitorováńı sledovat, př́ıpadněpokud se rozhodnete položku ze seznamu odebrat, označte ji a stiskněte klávesu delete. Pokudbyste chtěli změnit finálńı cenu přihozeńı nebo počet kus̊u daného zbož́ı ke koupi, muśıte tutopoložku ze seznamu smazat a poté znova přidat jej́ı nové monitorováńı. Chtěl bych upozor-

  • 42 PŘÍLOHA B. INSTALAČNÍ A UŽIVATELSKÁ PŘÍRUČKA

    nit na to, že všechna okna v celé aplikaci můžete bez problémů zavř́ıt, aniž byste zrušiliprob́ıhaj́ıćı monitorováńı položek. Až ukončeńım programu, tedy hlavńıho okna, přijdete ovšechny monitorované aukce, na což budete upozorněni dialogovým oknem. Proto programjako takový muśı běžet! Pokud byste chtěli jen zobrazit okno s právě prob́ıhaj́ıćım moni-torováńım, vyvolejte z nab́ıdky v hlavńım menu ViewSniffedItems. Pokud dojde k dočasnéztrátě internetového spojeńı, program čeká, dokud neńı spojeńı opět navázáno.

    Obrázek B.5: Okno zobrazuj́ıćı tabulku monitorovaných položek

    Důležité upozorněńı: Program funguje bez omezeńı v sandbox verzi eBay. Aby byl plněfunkčńı4 i v produkčńı verzi eBay, muśıte administrátora eBay požádat emailem o povoleńıaplikaci použ́ıvat, což je podmı́něno sepsáńım smlouvy a daľśıch náležitost́ı. Každopádně semuśıte stát partnerem eBay. Jinak se při přihozeńı (ostatńı funkce programu nejsou omezeny)zobraźı dialogové okno s chybou This call, or certain logic flows within the call, are restrictedto specific applications. Tato problematika se řešila i na oficiálńım fóru eBay, a proto uvád́ımodkaz[8], kde se dočtete v́ıce, př́ıpadně př́ımo zde[15], kde jsou popsány detaily a podmı́nky.

    4T́ım mám na mysli, aby fungovalo přihozeńı.

  • Př́ıloha C

    Obsah přiloženého CD

    Obrázek C.1: Seznam přiloženého CD

    43

    ÚvodHistorie eBayPrincip on-line aukceSoučasné trendy on-line nakupování

    MotivaceCíle práceVýsledek práceExistující implementace

    Analýza a návrh řešeníProgramovací jazykPoužité prostředí pro tvorbu

    RealizaceImplementace využívající eBay APIPřihlášení do systémuStruktura XML

    Získání informací o položce na eBayPřihozeníKlasická přihazovací aukceVytvoření nabídky a přihozeníMonitorování aukcíVyhodnocení času přihozeníZrušení monitorované aukceNázorný popis celého procesu přihození

    Koupě položky za fixní cenuPoslání nejlepší nabídky

    Poslání požadavku PlaceOfferStruktura HTTP hlavičkyStruktura XML požadavku

    TestováníJednotkové testyTesty grafického uživatelského rozhraníMockování objektů

    Praktické testování testeryVýsledky testováníČekací dialogové oknoResource bundle

    Funkčnost programuZhodnocení testování

    ZávěrLiteraturaSeznam použitých zkratekInstalační a uživatelská příručkaObsah přiloženého CD