pondělí 2. července 2012

Jak zjistit počet sdílení (i konkurenčních) webových stránek na Facebooku pomocí Google Refine a Facebook API

Zajímalo by vás jaké jsou nejsdílenější stránky konkurečního webu na Facebooku? Nebo jaké články ze serveru TV NOVA lidé nejvíce mezi sebou na Facebooku sdílí? Zjistit to, je možná jednodušší, než si myslíte. Pomoci vám v tom může další nástroj do Googlu, který se jmenuje Google Refine.

Tento nástroj byl původně vyvíjen společností Freebase, kterou Google před časem koupil, a jeho hlavní úlohou bylo pomáhat čistit nekonzistetní datasety. Ostatně podívejte se určitě na instruktážní video, které Google nabízí na stránkách produktu, až si budete program stahovat. Narozdíl od většiny služeb od Googlu totiž Google Refine běží u vás na počítači, byť se do něj přihlašujete v prohlížeči na adrese http://127.0.0.1:3333/

Po nainstalování, spuštění a načtení stránky Google Refine ve vašem browseru si můžete vybrat jakým způsobem chcete naimportovat data. Program totiž podporuje celou řadu formátů (CSV, XLS, JSON, XML etc.) a to jak ze souborů uložených na disku, tak přímo z webu. V praxi to tak znamená, že do něj můžete například naimportovat libovolný XML dokument z internetu. Tady se už dostáváme k našemu úvodnímu slibu. Značná část webů totiž obsahuje volně přístupnou mapu stránek v XML formátu, pomoci které pomáhají vyhledávačům lépe indexovat celý web. Obvykle má soubor název sitemap.xml a pomocí Googlu se můžete přesvědčit, že jich lze najít všude dost. Já jsem náhodou našel mapu stránek Televizních novin TV Nova na adrese http://tn.nova.cz/sitemap.xml

V menu Google Refine zvolte volbu Create project a v něm položku Web Addresses (URLs). Po zadání URL souboru (pozor včetně http!) se dostanete stránku Configure Parsing Options, zde vyberete myší typ oblasti, která se bude parsrovat, potvrdite ji tlačítkem a uvidíte náhled výsledného importu.



Pokud je vše podle vašich představ, pokračujte a přes tlačítko Create project vpravo nahoře založte nový projekt. Data se stáhnou a vy se objevíte v prostředí podobném klasickému tabulkovému procesoru se sloupci obsahujícími data z importovaného XML.

Nyní máte k dispozici mapu stránek a bude třeba ji doplnit o údaje o počtu sdílení na Facebooku (nebo o řadu dalších, vaší fantazii se meze nekladou). K tomu využijeme volbu z menu pro sloupec s url. Vybreme nejdříve volbu Edit column a v ní Add column by fetching URL's která umožňuje použít data z buňky jako součást volání libovolné URL. V našem případě to bude jednoduché volání API Facebooku, konkrétně jeho služby, která vrací počet shares konkrétní URL. Služba se nachází na adrese http://graph.facebook.com/?id=http://www.klaboseni.cz a je celkem zřejmé, že za parametr ID je třeba doplnit požadované URL. Služba vrací JSON, který mj. obsahuje i položko shares s počtem sdílení stránky na Facebooku.

Po volbě Add column by fetching URL's se objeví jednoduché vyskakovací okonké. Nás v něm nyní budou zajímat jen tři položky. Prvním je New column name kde uvedeme, jak se nový sloupec bude jmenovat např. FB JSON. Druhým je Throttle delay, kde je uvedena doba mezi jednotlivými dotazy v milisekundách. V základním nastavení má 5 sekund a pokud nikam nespěcháte, doporučuji ho nechat nastavené pravě na tuto hodnotu. Některé služby vás totiž při příliš agresivním dotazování mohou dočasně zablokovat.



Nicméně zkuste s ní experimentovat, u Facebook API by mělo nastavení na 1 sekundu (1000 v milisekundách) být v pořádku. Konečne posledním políčkem je textarea se názvem Expression. V ní můžete specifikovat jaká url, a případně s jakými parametry, budou volána a to pomocí programovacího jazyka GREL (či dvou dalších, ale nechme je stranou). V našem případě stačí výraz

"http://graph.facebook.com/?id=" + value

a pak už jen klikněte na OK a můžete začít stahovat data z Facebooku.



Po dokončení operace uvidíte nový sloupec, který obsahuje v každé buňce patřičný JSON.



Teď je ještě třeba extrahovat z JSONu počet shares pro danou stránku. Pomůže nám k tomu opět scriptovací jazyk GREL. Na sloupci opět zvolíme možnost Edit Column, tentokrát ale s volbou Add column based on this column, pomoci které lze vytvořit nový sloupec skrzeva transformaci původního.



Tentokrát využijeme vestavěného parseru JSONu v GRELu a do Expression přidáme následujicí instrukci:

value.parseJson()["shares"]



Zbývá ještě pojmenovat nový sloupec kupříkladu jako FB Shares. Pak jen stačí kliknout opět na OK.

Za chvíli máte k dispozici nový sloupec s přehledem sdílení.



Nyní ho jen seřadíme pomocí funkce Sort a je to.



Vidíme, že v případě TV Nova byly těmi nejsdílenějšími zprávami posledních týdnů právě tyhle:



Asi sami tušíte, že v případě konkurenčních stránek mohou být výsledky zajímavější a že se nemusíte jenom omezit na volání API pro Facebook Shares, ale o tom zase někdy jindy.

neděle 1. července 2012

Mapa followerů na Twitteru pomocí NodeXL a Google Fusion Tables

Analýza publika na sociálnících sítích by měla patřit k základům jakékoli systematické komunikaci s ním. Obzvlášť pokud se jedna o značku či osobu, která už může počítat své fanoušky na tisíce, může být analýza jejich profilů k nezaplacení. Jedním z typů analýzy je zmapování geografického rozmístění fanoušků. Jsou spíše z větších měst? Nebo jsou víceméně rozporstraněni po celé zemi? A jak na to vlastně přijít? A jaké fanoušky má moje konkurence?

Jednou z možností, jak prozkoumat odkud vaši fanoušci pocházejí, je využít údajů, které sami o sobě poskytují. V případě sociální sítě Twitter, které se budeme dále věnovat, je to i údaj Location, který mají fanoušci možnost vyplnit ve svém profilu. Právě z něj lze poměrně jednoduše vygenerovat mapu jejich umístění po světě s přijatelnou odchylkou od reality. Překvapivě nemusíte mít k tomu žádné speciální znalosti. Postačí k tomu obyčejný Microsoft Excel a Google Fusion Tables.

Získání základních údajů
Pokud nejste programátor, který si umí stáhnout seznam svých následovníků pomoci Twitter API, můžete k tomu využít open source tamplate pro Excel, který se jmenuje NodeXL a je určený především k social network analysis. Díky tomu obsahuje možnost importovat z Twitteru i seznam vašich (či konkurenčních i jiných) následovníků, včetně detailů o jejich profilu.

Pro rychlejší stažení doporučuji povolit pro NodeXL přístup k vašemu Twitter účtu, podstatně se tak zvýší limit na počet dotazů do Twitter API.



Po stažení potřebných údajů smažte přebytečné listy a ponechte jenom list Vertices a smažte přebytečné sloupce.



Soubor si můžete uložit jako XLS, ale pro lepší výsledky při konverzi doporučuji zvolit formát TSV neboli textový soubor oddělený tabulátory.S ním budeme pracovat v dalším kroku. Tím bude import dat do Google Fusion Tables.

Vytváříme mapu
V dalším kroku naimportujeme TSV se seznamem svých followerů do webové služby Google Fusion Tables, která je primárně určena pro práci a vizualizaci větší souborů dat. V Gogle Drive zvolíme možnost vytvořit nový soubor, vybereme možnost Table a nahrajem soubor s daty.



Po úspěšném importu bychom měli vidět tabulku podobnou jako je tato:



Zkontrolujte v menu položku Edit -> Modify Columns, že má u sloupce Description nastavený typ na Location, případně ho na něj nastavte. Tím, se Google Fusion Table dozvědí, že mají interpretovat data v tomto sloupci jako data určující geolokaci. Nyní už jen stačí zvolit tu spravnou vizualizaci. V našem případě tedy v menu zvolit položku Visualize a v ní vybrat Map. Fusion Tables spusti analýzu pomoci Google Maps API (aniž by vám ubírali ovšem z denního limitu):



a po chvíli se můžete těšit z podobného výsledku jako já:



Pokud jste hračičkové, můžete si s ním samozřejmě dál pohrát. Kupříkladu upravit šablonu pro popup okénko s detaily a podobně. Pro začátek to ovšem stačí.

Někdy příště se podíváme na to, jak získat kromě mapy i seznam GPS pozic a hlavně jak normalizovat data ze sloupce Location do jednotné podoby. Pomůže nám v tom další produkt společnosti Google jmémen Google Refine. Ale o tom zase jindy.