rubensayshi / gw2spidy

Tento projekt má za cíl poskytovat grafy prodejů a nákupů předmětů na obchodním trhu Guild Wars 2.

Jak to funguje?

ArenaNet vytvořila Obchodní trh tak, aby se do hry načítal z webové stránky.
Na tuto stránku můžete také přistupovat pomocí prohlížeče a pomocí svého herního účtu se přihlásit a prohlížet si všechny položky a nabídky.

Nyní jsem postavil nějaké nástroje, které se budou neustále spouštět, aby se automaticky přihlašovaly na tuto webovou stránku a zaznamenávaly všechna data, která najdeme, ve výsledku mohu zaznamenávat prodejní nabídky všech předmětů přibližně každou hodinu a s těmito daty mohu vytvářet grafy s cenou měnící se v čase!“

Přispívání

Každý je velmi vítán, aby přispíval, s 99% pravděpodobností to čtete na githubu, takže by nemělo být příliš těžké forkovat a dělat pull requesty, že ano 🙂 ?

Pokud potřebujete jakoukoliv pomoc s nastavením projektu nebo používáním gitu(hubu), tak mě prostě kontaktujte a já vám rád pomůžu!
Pokud chcete výpis databáze, protože s tím se mnohem lépe pracuje, tak mě prostě kontaktujte 😉

Zpětná vazba / pomoc

Pokud potřebujete pomoc nebo máte nějakou zpětnou vazbu, můžete mě kontaktovat na [email protected] nebo se ke mně připojit na irc.gamesurge.net #gw2spidy Drakie

Datum/časové údaje

Jako obvykle jsem na časová pásma nemyslel, když jsem tento projekt začínal, ale teď, když projekt forklo více lidí a když některým lidem exportuji data, je to najednou důležité …. Všechna data jsou uložena v časovém pásmu serveru, nicméně jsem se ujistil, že data jdoucí ven (grafy a API) jsou převedena na UTC (a Highcharts je převádí na časové pásmo prohlížeče).

Mailing List

Připojte se prosím k mailing listu Google Groups pro gw2spidy, abych vás mohl informovat o všech (zásadních) změnách / nových verzích kódové základny!

Nastavení prostředí

Nejjednodušší způsob, jak začít, je použít Vagrant. Tato metoda vám jediným příkazem poskytne místní virtuální počítač se spuštěnou instancí gw2spidy. Aby to fungovalo, budete potřebovat tři věci: Virtualbox, Ruby a drahokam Vagrant. Jakmile je budete mít, jednoduše vložte cd do adresáře gw2spidy a spusťte vagrant up. Tím se načte základní virtuální počítač pro vývoj (server Ubuntu Precise 64bit), nainstalují se všechny požadované balíčky, nakonfigurují se mysql a nginx a pak se přesměruje port 80 virtuálního počítače na port 8080 vašeho počítače. Po dokončení navštivte localhost:8080 v prohlížeči a můžete začít pracovat. Všimněte si, že se tím provede pouze část procházení potřebného k naplnění databáze. Chcete-li pokračovat v nastavení, přejděte na „Procházení Tradingpostu“.

Případně postupujte podle následujících kroků:

Poskytnu vám několik krátkých instrukcí k nastavení, které vám usnadní život, pokud chcete kód spustit pro sebe nebo přispět.K dispozici je také soubor INSTALL, který obsahuje úryvek, který kopíruji a vkládám, když nastavuji svůj virtuální počítač, to by mělo stačit 😉

Hodně se toho změnilo a nejspíš ještě nějakou dobu bude

Připojte se na IRC kanál a můžeme si popovídat!
Já (Drakie) a další lidé, kteří se na projektu již nějakou dobu podílejí, se s vámi rádi podělíme o naše znalosti a pomůžeme vám, speciálně pokud zvážíte možnost přispět!

Linux

Provozuji projekt na linuxovém serveru a mnoho požadavků nemusí být na windows k dispozici a s windows mám jen (nepatrné) (negativní) zkušenosti.
Pokud to chcete provozovat na počítači s windows, pro účely vývoje, pak důrazně doporučuji provozovat pouze virtuální stroj s linuxem (vmware player je zdarma a funguje docela dobře).
Pokud si najdete cestu na IRC kanál, mám na svém google disku obraz virtuálního stroje (vytvořený Marthisdilem) se vším nastaveným a připraveným k použití 😉

PHP 5.3

Budete potřebovat PHP5.3 nebo vyšší kvůli podpoře jmenných prostorů atd.
Budete potřebovat nainstalovaná následující rozšíření:

  • php5-curl
  • php5-mysql
  • php5-memcache

MySQL / Propel

Myslím, že 4.x bude stačit, i když já používám 5.x.
Na straně PHP používám PropelORM, díky tomu byste asi mohli snadno přejít na PostgreSQL nebo MSSQL, kdybyste museli 😉

Apache / Nginx / CLI

Projekt bude dobře fungovat jak s Apachem, tak s Nginxem (ve skutečnosti používám apache na svém dev stroji a nginx v produkci), příklady konfigurací najdete ve složce docs tohoto projektu.
Pokud chcete spustit kód, který prochází pavouky obchodního trhu, pak budete potřebovat přístup k příkazovému řádku, pokud chcete spustit jen kód frontendu (a dostat ode mě výpis databáze), pak můžete žít i bez něj 😉

Na čisté instalaci možná budete muset povolit přepisování apache pomocí příkazu: a2enmod rewrite

Memcache

Pomocí démona memcache a PHP Memcache lib můžete snadno cachovat některé věci v paměti (údaje o položkách a typech).
Všechno však bude fungovat dobře i bez memcache, pokud máte memcache nainstalovanou, ale nechcete, aby ji projekt používal, pak definujte MEMCACHED_DISABLED v config.inc.php a nastavte ji na true.
Potřebujete knihovnu php5-memcache, ale ta nebude memcache k ničemu používat 😉

Všimněte si, že potřebujete php5-memcache a ne php5-memcached
Všimněte si, že musíte mít rozšíření memcache, i když ho nechcete používat!

Redis

Kód pavoukování používá vlastní frontu vaření a nějaký vlastní systém vaření, abychom se ujistili, že neuděláme více než x požadavků.
Oba fronty a sloty jsou sestaveny pomocí Redis (knihovna Predis je již obsažena ve složce vendor).
Předtím jsem na to používal MySQL, ale použití MySQL bylo mnohem náročnější na zátěž a při použití Redisu je to i o něco rychlejší!!!

Je potřeba nainstalovat redis-server a musí to být verze 2. Je potřeba nainstalovat redis-server.2 nebo vyšší
Pokud používáte debian, musíte kompilovat ze zdrojových kódů, ubuntu má aktualizovaný balíček pomocí apt-get 😉

Silex / Twig / Predis

Jen některé knihovny PHP, které jsou již obsaženy ve složce vendor.

jQuery / Highcharts / Twitter Bootstrap

Jen některé knihovny HTML / JS / CSS, již obsažené ve složce webroot/assets/vendor.

Budete potřebovat knihovnu pear Log

pear channel-discover pear.phing.infopear install phing/phingpear install Log

Node.js a grunt

Přestože Node.js a grunt nejsou přímo potřeba pro spuštění gw2spidy, grunt je potřeba pro sestavení js a css souborů, které jsou dodávány s webovými stránkami. To znamená, že nepotřebujete node na svém webovém serveru, ale můžete provádět úlohy grunt na jakémkoli jiném macinu, pokud zkopírujete soubory v webroot/assets/compiled do stejného adresáře na webovém serveru.

Node.js nainstalujte pomocí obvyklého instalačního mechanismu pro váš operační systém. Poté spusťte npm insall -g grunt pro globální instalacigruntu na počítači.

Nastavení projektu

ArenaNet mi nevadí, že to dělám, ale přesto chci omezit množství požadavků, které střílím na jejich web, nebo je alespoň trochu rozložit.Vymyslel jsem tento koncept „slotů pro požadavky“, nastavím si x slotů, jeden si vyžádám, když udělám požadavek, a pak ho dám vychladnout, než ho můžu znovu použít. takhle můžu trochu lépe kontrolovat záplavu, po technické stránce se to dělá pomocí setříděných sad Redis.

Fronty na pozadí

Veškerá práce s procházením se provádí v procesu / démonech na pozadí a těžký úkol se provádí pomocí několika front, proces frontyzpracovává také dříve zmíněné sloty pro požadavky.To se také provádí pomocí setříděných sad Redis.

Config / Env

Vymyslete si název, který reprezentuje váš stroj / evn, např. ruben-vm1 nebo gw2spidy-prod-vps2.
Zkopírujte config/cnf/example-custom-cnf.json do config/cnf/<your-chosen-name>.json a upravte jej tak, abyste nastavili hodnoty proauth_email a auth_password.

Zkopírujte config/cnf/example-env do config/cnf/env a upravte jej, obsahuje řádek pro každý konfigurační soubor, ze kterého by se měl načístconfig/cnf/<name>.json
Nahraďte první řádek (ruben-vm1) názvem, který jste předtím zvolili, dev a default ponechte, to jsou dalšíkonfigurační soubory, které by se měly také načíst (nebo změňte dev na prod, pokud nechcete ladicí režim.

Načtou se vámi zadané konfigurační soubory config/cnf/env (v opačném pořadí) a přepíší ty předchozí. pro načtení dalších konfiguračních hodnot (jako je přihlášení do databáze atd.), zaškrtněte config/cnf/default.json pro všechny volby, které byste také mohli vidět ve svém vlastním konfiguračním souboru.

Na config/cnf/env a všech config/cnf/*.json jiných než default.json, dev.json a prod.json jsou zapnuty .gitignore, takže nebudou řízeny podle verzí

Nastavení databáze

V adresáři config je config/schema.sql (generovaný programem propel na základě config/schema.xml, takže změny v databázi by měly být provedeny v XML a poté vygenerování SQL souboru!).
Měli byste vytvořit databázi s názvem ‚gw2spidy‘ a nahrát do ní config/schema.sql. Poté importujteconfig/itemTypesAndDisciplines.sql , abyste získali určité stabilní Disciplíny a typy předmětů.

RequestSlots Setup

Spusťte tools/setup-request-slots.php pro vytvoření počátečních slotů pro požadavky, můžete to také spustit během vývoje, abyste znovu iniciovali sloty, takže je můžete okamžitě znovu použít, pokud jsou všechny na cooldownu.

Vytváření databáze předmětů

Skripty popsané níže jsou volány skriptem bin/rebuild-items-recpipes.sh.

Pro vytvoření databáze předmětů chcete spustit tools/update-items-from-api.php. Tím získáte všechny známé předměty ve hře a za běhu vytvoříte nové typy a podtypy.

Poté budete chtít skript spouštět každou noc, abyste měli aktuální informace o známých předmětech.

Pokud chcete nebo potřebujete údaje o receptech v databázi, musíte také spustitphp tools/create-recipe-map /some/place/on/harddrive. Po jeho dokončení musíte také importovat mapu pomocíphp tools/import-recipe-map /some/place/on/harddrive.

Vytvoření webových aktiv

gw2spidy servíruje js a css soubory v jednom souboru a (v závislosti na konfiguraci) minifikované. Pro vytvoření těchto souborů stačí spustit grunt.

Procházení obchodního místa

Samotným pracovníkem ItemListingDB je tento skript: daemons/worker-queue-item-listing-db.php.
Vyskočí položky z fronty listingů a zpracuje je, tyto položky z fronty jsou automaticky requeue’d s jejich prioritou, takže by mělo stačit spustit daemons/fill-queue-item-listing-db.php jednou, abyste dostali počáteční dávku.
Protože je povoleno API v2/commerce, worker používá koncový bod v2/commerce/listings, aby zpracoval nakonfigurované množství položek na požadavek najednou (max. 250!).

Pokud však skript selže, můžeme někdy přijít o položku fronty nebo mohou být v určitém okamžiku do databáze přidány nové položky, takže existuje skript daemons/supervise-queue-item-listing-db.php, který zajišťuje, aby byla fronta stále správně naplněna.

Existuje systém priorit, takže některé předměty (například zbraně nad určitou vzácnost/úroveň) jsou zpracovávány častěji než jiné (například záchranné sady, které nikdo z TP nekupuje…).
Více informací o tomto systému najdete níže v části Systém priorit!

Pracovník drahokamů

Skript daemons/worker-gem.php provede 2 požadavky na rozhraní GW2-API pro výměnu drahokamů, aby získal kurzy a objem, a pak se na 180 sekund (3 minuty) uspí.

Spuštění pracovníků

Všichni pracovníci provedou 100 smyček, aby splnili svůj konkrétní úkol, nebo pokud žádný úkol nemají, provedou krátké uspání a čekají na úkol.
Také uspí, pokud nejsou k dispozici žádné sloty.

Předtím jsem spouštěl 4 workery paralelně pomocíwhile ; do php daemons/worker-queue-item-listing-db.php >> /var/log/gw2spidy/worker.1.log; echo "restart"; done;
Kde jsem nahradil .1 tím, které číslo ze 4 to je, takže jsem dostal 4 logy na ocas.

Teď jsem přidal několik bash skriptů ve složce bin do bin/start-workers.sh <num-listing-workers> <num-gem-workers>a bin/stop-workers.sh <now> pro jejich správu.
Měli byste si ty bash skripty zkontrolovat a pochopit je, než je spustíte imo 😉 ale taky mi můžete věřit na moje modré oči a prostě to spustit xD

Systém priorit

Množství požadavků, které děláme, je omezeno naším systémem requestslotů, bohužel jsme teď vázáni tím, že děláme 1 položku na požadavek(dříve jsme mohli kombinovat až 250).
Takže jsem vytvořil systém priorit, aby se „důležité“ položky zpracovávaly častěji, v této tabulce jsem vypočítal priority:
https://docs.google.com/a/rubensayshi.com/spreadsheet/ccc?key=0Alq65aekWXJmdGotSmdBYXJPZ0NKbHBhdzVZMlh5Q1E#gid=0

to se trochu změnilo, musím tabulku aktualizovat a brzy bych sem měl něco napsat

Relace GW2 (zastaralé)

Při pavoukování jsme dříve přistupovali na tradingpost pomocí relace vytvořené přihlášením k účtům.guildwars2.com.
Po přihlášení nám to dá session_key, který umožní přístup k tradingpostu, ovšem omezený pouze na možnost získat seznamy předmětů!

Při otevření tradingpostu zevnitř hry k němu přistupujeme pomocí session_klíče vygenerovaného z přihlášení do hry, tyto session mají přístup k více funkcím tradingpostu!!!
S touto session můžeme také zobrazit seznam nabídek za různé ceny, místo pouze nejnižší prodejní a nejvyšší nákupní!
Pro výměnu drahokamů vám ingame session_key umožňuje vypočítat konverze, zatímco accounts.guildwars2.com session vám dá pouze zaokrouhlený průměr (což je tak trochu k ničemu).

Jako v poslední době ArenaNet zaneřádil seznamy předmětů (výsledky vyhledávání a podobně), které jsou velmi nepřesné (kvůli kešování), můžete to vidět i ingame.
Chci také shromažďovat údaje o výměně drahokamů ….
Takže jsem potřeboval způsob, jak být schopen použít ingame session_key při spideringu!

Session_key můžete zachytit buď pomocí Fiddle2r, který zachytí HTTPS trafic, nebo pomocí nějakého vlastního nástroje, který zachytí URL ze sdílené paměti …
Přidal jsem do databáze tabulku s názvem gw2session a formulář na /admin/session pro vložení ingame session_key, vyžaduje také vyplnění ‚secret‘, který se rovná tomu, co nastavíte v configu nebo není vyžadován na dev envs

Nevím přesně, co můžete dělat s cizím session_key, tudíž spoléhám na to, že se nebudu flákat a budu pravidelně aktualizovat session_key a nebudu akceptovat, aby mi ostatní dávali svůj session_key!
S jistotou vím, že v kombinaci s charidem můžeš zadávat příkazy k nákupu a podobně i mimo hru, takže bys měl být s touto informací opatrný 😉

Mám malý nástroj (poskytnutý někým jiným), který bez větších potíží rychle získá session_key (vyhledáním ve sdílené paměti), nebudu ho sdílet veřejně, ale můžete zvážit, zda se nepřipojíte na IRC kanál a nepožádáte o něj 😉

Copyright and License

Copyright (c) 2012, Ruben de Vries
Všechna práva vyhrazena.

Redistribuce a použití ve zdrojové i binární podobě, s úpravami nebo bez nich, jsou povoleny za předpokladu, že jsou splněny následující podmínky:

  1. Redistribuce zdrojového kódu musí zachovat výše uvedené upozornění na autorská práva, tento seznam podmínek a následující prohlášení o vyloučení odpovědnosti.
  2. Redistribuce v binární podobě musí reprodukovat výše uvedené upozornění na autorská práva, tento seznam podmínek a následující prohlášení o vyloučení odpovědnosti v dokumentaci a/nebo jiných materiálech poskytovaných s distribucí.

TENTO SOFTWARE JE POSKYTOVÁN DRŽITELI AUTORSKÝCH PRÁV A PŘISPĚVATELI „TAK, JAK JE“, A JAKÉKOLI VÝSLOVNÉ NEBO PŘEDPOKLÁDANÉ ZÁRUKY, VČETNĚ, ALE NE POUZE, PŘEDPOKLÁDANÝCH ZÁRUK PRODEJNOSTI A VHODNOSTI PRO URČITÝ ÚČEL, JSOU VYLOUČENY. VLASTNÍK AUTORSKÝCH PRÁV ANI PŘISPĚVATELÉ V ŽÁDNÉM PŘÍPADĚ NENESOU ODPOVĚDNOST ZA JAKÉKOLI PŘÍMÉ, NEPŘÍMÉ, NÁHODNÉ, ZVLÁŠTNÍ, PŘÍKLADNÉ NEBO NÁSLEDNÉ ŠKODY (MIMO JINÉ VČETNĚ POŘÍZENÍ NÁHRADNÍHO ZBOŽÍ NEBO SLUŽEB, ZTRÁTY UŽITÍ, DAT NEBO ZISKU NEBO PŘERUŠENÍ PROVOZU), AŤ UŽ BYLY ZPŮSOBENY JAKOUKOLI FORMOU A NA ZÁKLADĚ JAKÉKOLI TEORIE ODPOVĚDNOSTI, AŤ UŽ NA ZÁKLADĚ SMLOUVY, PŘÍSNÉ ODPOVĚDNOSTI NEBO DELIKTU (VČETNĚ NEDBALOSTI NEBO JINAK), KTERÉ JAKÝMKOLI ZPŮSOBEM VZNIKLY V DŮSLEDKU POUŽÍVÁNÍ TOHOTO SOFTWARU, A TO I V PŘÍPADĚ, ŽE BYLI NA MOŽNOST VZNIKU TAKOVÉ ŠKODY UPOZORNĚNI.

Názory a závěry obsažené v softwaru a dokumentaci jsou názory a závěry autorů a neměly by být vykládány jako oficiální politika, ať už vyjádřená nebo implicitní, projektu gw2spidy.

.

Leave a Reply