{"id":405,"date":"2016-08-20T22:18:32","date_gmt":"2016-08-20T19:18:32","guid":{"rendered":"http:\/\/pori.hacklab.fi\/wordpress\/?p=405"},"modified":"2016-08-20T22:31:12","modified_gmt":"2016-08-20T19:31:12","slug":"https-nodejs-heroku-pulljson-com","status":"publish","type":"post","link":"https:\/\/pori.hacklab.fi\/wordpress\/?p=405","title":{"rendered":"https + nodejs + heroku -> pulljson.com"},"content":{"rendered":"<p>T\u00e4n\u00e4\u00e4n tuli edistetty\u00e4 taas hiukan tuota tekem\u00e4\u00e4ni pulljson.com palvelua.<\/p>\n<p>Palvelua olen l\u00e4hinn\u00e4 tehnyt itse\u00e4ni varten jotta voin yksinkertaisissa html+css+javascript web-sovelluksissa hakea tietoja toiselta verkkosivulta. Mielest\u00e4ni t\u00e4m\u00e4 on aika perustavan laatuinen Internet-selaimista puuttuva ominaisuus. Nykyp\u00e4iv\u00e4n\u00e4 puhuttaessa API avoimuudesta niin yleens\u00e4 ensimm\u00e4iset hipsterit jotka ovat tekem\u00e4ss\u00e4 kokeilujaan jonkun k\u00e4ytt\u00e4m\u00e4ns\u00e4 palvelun parantamiseksi , useimmiten vain itselleen, t\u00f6rm\u00e4\u00e4v\u00e4t juurikin t\u00e4h\u00e4n ettei ko. palvelu tarjoa API:a vaan esim. oma \/ muu data on &#8217;louhittava&#8217; sivulta itse.<\/p>\n<p>Louhintaty\u00f6kaluja olen <a href=\"http:\/\/pulljson.com\/#about\">pulljson.com<\/a>:ssa my\u00f6s joitakin eritellyt mutta mainitaan t\u00e4ss\u00e4 ehk\u00e4 yleisimm\u00e4t itse k\u00e4ytt\u00e4m\u00e4ni:<\/p>\n<ol>\n<li>Ty\u00f6 alkaa yleens\u00e4 tarkistamalla esim. Chrome-selaimen Developer Tools:n <a href=\"https:\/\/developers.google.com\/web\/tools\/chrome-devtools\/profile\/network-performance\/resource-loading?utm_source=dcc&amp;utm_medium=redirect&amp;utm_campaign=2016q3\">Network <\/a>seuraten k\u00e4ytt\u00e4\u00e4k\u00f6 sivu itse jotain tausta palvelua API:a jota itse voisin k\u00e4ytt\u00e4\u00e4<\/li>\n<li>python <a href=\"https:\/\/docs.python.org\/2\/howto\/urllib2.html#fetching-urls\">urllib2 <\/a>\/ <a href=\"http:\/\/docs.python-requests.org\/en\/master\/\">requests<\/a><\/li>\n<li>wget \/ curl \/ selaimen osoiterivi \/\u00a0<a href=\"https:\/\/github.com\/jkbrzt\/httpie\">httpie<\/a><\/li>\n<li><a href=\"http:\/\/www.nightmarejs.org\/\">nightmarejs\/electron<\/a> (<a href=\"http:\/\/electron.atom.io\/\">electron <\/a>on headless-tyyppinen chromiumiin perustuva selain jota ohjelmoidaan javascriptilla)<\/li>\n<li><a href=\"http:\/\/phantomjs.org\/\">phantomjs <\/a>(headless-tyyppinen webkit:iin perustuva selain jota ohjelmoidaan javascriptill\u00e4)<\/li>\n<\/ol>\n<p>Yll\u00e4 olevista viel\u00e4 mainittakoon se ett\u00e4 esim. ASP.net sovellusten login, jossa tapahtuu redirect:a session-key asettelua ja sokerina view-statea-javascripteja navigointi nappuloiden takana, tappaa kuta kuinkin kaikki ei-selain pohjaiset l\u00e4hestymisyritykset wget, curl, httplib2 jne. T\u00e4ll\u00f6in kohdan esim. kohtien 4 ja 5 keinoja tarvitaan, mik\u00e4li kyseess\u00e4 jatkuvaa datan louhintaa. T\u00e4ll\u00e4iseen t\u00f6rm\u00e4simme kollegani Jounin kanssa koodatessamme\u00a0<a href=\"https:\/\/bitbucket.org\/jounhi\/hattiwatti\/src\/1eb69e594fa62734d34a256516c4ec879eebf2e0\/hattiwatti.js?fileviewer=file-view-default#hattiwatti.js-39\">hattiwatti.js<\/a>\u00a0\u00e4\u00e4 .<\/p>\n<p>No tosiaan t\u00e4n\u00e4\u00e4n tarkoituksenani oli kokeilla<a href=\"https:\/\/www.sslforfree.com\/\"> ilmaisen https sertifikaatin<\/a> asentamista t\u00e4h\u00e4n &#8221;scrape&#8221;-palveluuni (http:\/\/pulljson.com) joka py\u00f6rii herokussa (<a href=\"https:\/\/html-to-json.herokuapp.com\/\">https:\/\/html-to-json.herokuapp.com\/<\/a>).<\/p>\n<p>Lopputulos muutaman tunnin github:n koodieditorilla\u00a0<a href=\"https:\/\/github.com\/santeriv\/pulljson\/commits\/master\">pakertamisen<\/a>\u00a0ja <a href=\"http:\/\/lmgtfy.com\/?q=node+https+heroku\">ep\u00e4m\u00e4\u00e4r\u00e4isten googletusten<\/a> j\u00e4lkeen oli my\u00f6nnett\u00e4v\u00e4 ett\u00e4 ilmaiseksi ei saa ihan kaikkea. Vaan siit\u00e4 pit\u00e4isi sitten maksaa esim. 8 dollaria kuussa (1. maksullinen hobby-taso) jos haluaa tuon saada herokussa toimimaan oman domainin kanssa.<\/p>\n<p>No sin\u00e4ll\u00e4\u00e4n olin tyytyv\u00e4inen ett\u00e4 sain pidetty\u00e4 toisen osan scrape-palvelustani toimimassa jquery\/css-tyypiseen hakuun perustuva palvelu on suht. ok toiminutkin &#8211; mit\u00e4 nyt <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.github.santeriv.pulljson.lounaspori.app&amp;hl=fi\">lounaspori Android sovellus<\/a> on ollut tovin p\u00e4ivitt\u00e4m\u00e4tt\u00e4 eli toimimatta, joka n\u00e4ytt\u00e4\u00e4 kuta kuinkin t\u00e4lt\u00e4 : <a href=\"http:\/\/santeriv.github.io\/lounaspori\/\">http:\/\/santeriv.github.io\/lounaspori\/<\/a>\u00a0(kirjoitus hetkell\u00e4 Ravintola Sofia on ainoa jonka pulljson.com:n kautta tehty scrape viel\u00e4 toimii).<\/p>\n<p>Lis\u00e4ksi olin tyytyv\u00e4inen l\u00f6yt\u00e4ess\u00e4ni heroku-instansseihin <a href=\"https:\/\/github.com\/santeriv\/heroku-buildpack-phantomjs\">keinon <\/a>asentaa phantomjs jota 2. keskener\u00e4iseksi j\u00e4\u00e4nyt palveluni vaatii.<\/p>\n<p>Esimerkki kutsu uudesta palvelusta, jolla voi siis hakea base64 formaatissa kuvakaappauksen selaimelta joltain sivulta &#8211; t\u00e4ss\u00e4 kohtaa pori hacklab:n google calendar print preview sivulta:<\/p>\n<p><a href=\"https:\/\/pulljson.com\/snapshot?site=https:\/\/calendar.google.com\/calendar\/print_preview?dates=20160820%2F20161031&amp;hl=fi&amp;ctz=Europe%2FHelsinki&amp;pgsz=letter&amp;wkst=2&amp;mode=AGENDA&amp;src=stkf8hlcbcs3iht3ngk630lomc%40group.calendar.google.com\">https:\/\/pulljson.com\/snapshot?site=https:\/\/calendar.google.com\/calendar\/print_preview?dates=20160820%2F20161031&amp;hl=fi&amp;ctz=Europe%2FHelsinki&amp;pgsz=letter&amp;wkst=2&amp;mode=AGENDA&amp;src=stkf8hlcbcs3iht3ngk630lomc%40group.calendar.google.com<\/a><\/p>\n<p>eli tyyliin n\u00e4in:<\/p>\n<p>http:\/\/pulljson.com\/snapshot?site=http:\/\/yourdomain.fi<\/p>\n<p>ja paluuviestist\u00e4 voit vaikka kokeilla kopioida &#8217;kuva&#8217; sivun loppuun asti ilman &#8221; merkkej\u00e4<\/p>\n<pre>data:image\/png.......Jotainmerkkej\u00e4ennenlainausmerkkiinastimutteilainausmerkki\u00e4eih\u00e4n<\/pre>\n<p>T\u00e4m\u00e4n j\u00e4lkeen kun olet kopioinut leikep\u00f6yd\u00e4lle t\u00e4m\u00e4n &#8221;kuvan&#8221; voit kokeilla katsella sit\u00e4 esim. liitt\u00e4m\u00e4ll\u00e4 leikep\u00f6yd\u00e4n sis\u00e4ll\u00f6n selaimen osoiteriville ja painamalle enter<\/p>\n<p>(toim.huom. <em>mobilistit<\/em> jompi kumpi kuitenkin tukehtuu joko selain tai leikep\u00f6yd\u00e4n muisti \ud83d\ude42 siksi ohjeessa &#8221;enter&#8221; eik\u00e4 mit\u00e4\u00e4n sormella huitomis copy-paste-ohjeita t\u00e4ss\u00e4)<\/p>\n<p><span style=\"line-height: 1.6471;\"><!--more-->Itselle t\u00e4m\u00e4 scrape-kykenevyys on itsess\u00e4\u00e4n aika t\u00e4rke\u00e4\u00e4, joka t\u00e4st\u00e4kin postauksesta saattaa k\u00e4yd\u00e4 ilmi.\u00a0<\/span><!--more--><\/p>\n<p>Kommentoikaa ja kyselk\u00e4\u00e4 toki, jos esim. scrape tai ko. palvelu her\u00e4tti kysymyksi\u00e4 tai ajatuksia.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4n\u00e4\u00e4n tuli edistetty\u00e4 taas hiukan tuota tekem\u00e4\u00e4ni pulljson.com palvelua. Palvelua olen l\u00e4hinn\u00e4 tehnyt itse\u00e4ni varten jotta voin yksinkertaisissa html+css+javascript web-sovelluksissa hakea tietoja toiselta verkkosivulta. Mielest\u00e4ni t\u00e4m\u00e4 on aika perustavan laatuinen Internet-selaimista puuttuva ominaisuus. Nykyp\u00e4iv\u00e4n\u00e4 puhuttaessa API avoimuudesta niin yleens\u00e4 ensimm\u00e4iset hipsterit jotka ovat tekem\u00e4ss\u00e4 kokeilujaan jonkun k\u00e4ytt\u00e4m\u00e4ns\u00e4 palvelun parantamiseksi , useimmiten vain itselleen, t\u00f6rm\u00e4\u00e4v\u00e4t juurikin &hellip; <a href=\"https:\/\/pori.hacklab.fi\/wordpress\/?p=405\" class=\"more-link\">Jatka lukemista<span class=\"screen-reader-text\"> &#8221;https + nodejs + heroku -> pulljson.com&#8221;<\/span><\/a><\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[8,14,15,13,12,18,17,10,11,9,16],"_links":{"self":[{"href":"https:\/\/pori.hacklab.fi\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/405"}],"collection":[{"href":"https:\/\/pori.hacklab.fi\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pori.hacklab.fi\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pori.hacklab.fi\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/pori.hacklab.fi\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=405"}],"version-history":[{"count":3,"href":"https:\/\/pori.hacklab.fi\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/405\/revisions"}],"predecessor-version":[{"id":408,"href":"https:\/\/pori.hacklab.fi\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/405\/revisions\/408"}],"wp:attachment":[{"href":"https:\/\/pori.hacklab.fi\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pori.hacklab.fi\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pori.hacklab.fi\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}