Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Sovellus joka etsii uutisia monista eri lähteistä

Sivun loppuun

E1ss [16.01.2018 18:52:46]

#

Olen ajatellut kehittää sovelluksen johon voi syöttää listan haluamiaan hakusanoja ja sitten se etsii monista eri uutissivustoilta uutisia joissa mainitaan hakusanat. Itsellä on jonkinlainen näkemys miten lähden tekemään sitä mutta haluan kuitenkin että joku osaava katsoo strategiaani ja sanoo pitäisikö jotain tehdä erilailla.

Ajattelin että uutisesta haettaisiin otsikko ja ensimmäiset muutamat rivit. Sitten käyttäjä voi klikata auki uutisen jolloin se menee varsinaiselle sivulle. Ajattelin toteuttaa sen siten että jokainen listan rivi hakee php koodia netistä johon syöttää joitain tietoja (esim. hakusanat ja mitkä uutiset on jo haettu) ja sitten tämä php koodi palauttaa otsikon ja ensimmäiset rivit. Olen kuitenkin miettinyt että käykö tässä niin että haku kestää todella kauan kun jokainen käyttäjä lähtee hakemaan uutisia sattuman varaiselta sivulta ja hakee niin pitkään kunnes sopiva löytyy? Ajattelin käyttää RSS sivuja eli joltain BBC:ltä katsoisin sieltä listan ja sitten niitä rupeaisin tutkimaan. Tässä olisi perus idea. Onko mielipiteitä että onko hyvä vai kannattaako toteuttaa eri lailla. Esim. haluaisin mahdollisimman paljon laskuista suorittaa käyttäjän puhelimella että ei tarvitse nopeaa nettiä.

Toinen asia on että koodin pitäisi periaattessa nähdä koko juttu että pystyy katsomaan löytyykö hakusanoja. Jos ottaa esim tämän CNN:än uutisen niin miten pystyn etsimään koodista tuon sivun tekstiosuuden. En siis halua että koodi ottaa mainoksia tai muuta tekstiä tai kuvia sivulta. Ja tämä pitäisi toimia kaikilla sivuilla suhteellisen helposti jotta pystyn lisäämään erilaisia uutissivuja nopeaan tahtiin eikä kaikkiin tarvitsisi määritellä erikseen mistä kohtaa teksti löytyy.


Tässä taitaa olla nyt kaikki. Varmaan jotain tarkennettavaa löytyy ja olen unohtanut jotain mutta tästä voimme aloittaa keskustelun.

groovyb [16.01.2018 19:53:35]

#

lähtökohtaisesti crawl pitää suorittaa tausta-ajoina, ja näyttää tuloksia näistä aikaisemmin haetuista tiedoista. reaaliaikainen haku tulee aivan varmasti liian raskaaksi.

E1ss [16.01.2018 20:00:16]

#

Eli ideana olisi että käyttäjälle näkyisi samanlainen näkymä kuin Facebookissa, Instagramissa tai muussa vastaavassa. Siinähän vanhat näkyy hetkenaikaa mutta ei sen uuden sisällön haku kestä kuin noin 1-2 sec. Tarkoitatko tätä että näyttäisin ensin vanhan sisällön ja sitten lataisin taustalla uutta sisältöä. Idena on muuten vähän samanlainen kuin Googlen News and Wheter sovellus eli jos joku on käytänyt niin ymmärtää idean. En vain ole tekemässä tästä niin monimutkaista mutta näytän samalla tavalla uutisia tietyistä lähteistä eri käyttäjille erilaisena riippuen hakusanoista.

Lisäys: En ole varma mutta taisin juuri ymmärtää että tarkoitit että samaan aikaan kun selaa niin se hakisi uutisia niin sitä en tarkoittanut. Tarkoitin juuri instagramin kaltaista feediä jossa sovelluksen avatessa haetaan uutta sisältöä tietty määrä. Sitten sen voi päivittää pyyhkäisemällä ylhäältä alas. Ja sitten vaikka kun on selannut 20 eri riviä listalta se lataa automaattisesti seuraavat 20 jotta selaaminen on sujuvaa eikä kaikkia 1000 tarvitse ladata kerralla.

Lebe80 [16.01.2018 22:46:17]

#

Toinen puhuu aidasta ja toinen seipäistä.

Groovyb tarkoittanee, että sinulla on jokin ajastettu toiminto, mikä hakee uutislähteistä sisältöä t ajan välein ja tallentaa nämä tiedot esim. tietokantaadi, jolloin ne ovat a) nopeasti noudettavissa kävijöillesi ja b) valmiiksi parsittu oikeaan muotoon.

Tällöin käyttäjille ei tule mitään typeriä lataustaukoja, jos uutislähteet A, B ja C syystä tai toisesta palauttavat tulokset hitaasti. Tällöin ei myöskään haittaa, vaikka käyttäjiä olisi satojakin yhtäaikaisesti selaamassa sivustoasi.

Se miten näytät näitä jo haettuja uutisia käyttäjille ei liity tähän mitenkään.

E1ss [17.01.2018 07:23:13]

#

Mutta jos haen joskus ennen kuin pelaaja on edes avannut sovellusta tiedot sanotaan vaikka 5 h ennen niin silloinhan uutiset on jo vanhoja eikä ihan uusia ole mahdollista lukea. Ja entäpä jos teen sovellukseen refresh nappulan jolla katsottaisiin onko uusia uutisia tullut?

Lebe80 [17.01.2018 08:20:05]

#

E1ss kirjoitti:

Mutta jos haen joskus ennen kuin pelaaja on edes avannut sovellusta tiedot sanotaan vaikka 5 h ennen niin silloinhan uutiset on jo vanhoja eikä ihan uusia ole mahdollista lukea. Ja entäpä jos teen sovellukseen refresh nappulan jolla katsottaisiin onko uusia uutisia tullut?

Älä laita ajastusta noin pitkäksi aikaa. Itse ajattelin, että aikaväli olisi esim. max. tunnin luokkaa. Ajastus hakisi esim. 10 - 60 min välein palveluista uusimmat uutiset.

Jos käyttäjä ei on 5h käyttämättä sovellustaan, niin tällöin hänelle tietysti näkyy nämä 5h:n aikana tulleet uutiset (koska palvelusi on tehnyt töitä tälläkin aikavälillä, koska sen palvelut on ajastettuina)

Tietenkin jatkokehitystä sinulla on tässä, miten tarkistat uusimmat uutiset, jotta uutisten haku olisi vaivatonta.

E1ss [17.01.2018 12:18:37]

#

Löysin nyt esim bingin tarjoaman APIn jolla voi etsiä uutisia netistä. Siinä on kuitenkin se ongelma että saan vain otsikon ja lyhyen kuvauksen mutta haluaisinkin ehkä nähdä koko uutisen että koodi voi analysoida sen ja antaa jotain tietoa lukijalle esim pituus. Onko kellään tietoa miten esim. Flipboard hoitaa omat uutisensa. Heillähän suurin osa uutisista on lyhennettyjä versioita jostain muiden uutisivujen uutisista. Varmaan heillä on joku koodi joka katsoo uutisen ja automaattisesti tekee siitä tiivistelmän.

Lebe80 [17.01.2018 12:40:23]

#

Eikös Google joutunut ongelmiin, kun sen avulla pystyi näyttämään koko sisällön, mikä johti siihen, ettei sivusto saanut mainostuloja.

Veikkaan, että tämän vuoksi koko sisältöä ei ole saatavilla.

E1ss [17.01.2018 13:01:49]

#

Mutta en näyttäisi kävijälle sivua vaan pelkästään koodissa katsoisin sen pituuden ja kuinka usein sanoja esiintyy

Lisäys: Eli siis miten pystyisin saamaan eri uutissivuilta (bbc, cnn, yms.) Uutisia kokonaisuudessa jotta voisin lyhentää ne muutamaan lauseeseen niin voisin näyttää oman sovellukseni käyttäjälle otsikon, lyhennyksen, uutisen pituuden ja vaikka kuvan joka uutisessa on käytössä. Kun sitten käyttäjä klikkaa sovelluksessani otsikkoa hänet vietäisiin alkuperäiselle sivulle lukemaan juttu jolloin ei tule tekijäoikeus ongelmia

Lebe80 [17.01.2018 13:34:39]

#

Teet hakusivustojen hakutoimintojen perusteella oman parserin, mikä hakeekin itse sivujen sisällön noiden Bingin ja Googlen Apien perusteella.

Eli hakukoneiden apit hakevat sinulle halutut sivut, sinä hoidat itse linkin avaamisen ja sisällön noutamisen ja sen tiivistämisen.

E1ss [17.01.2018 13:41:02]

#

Tuo on hyvä idea. Eli jos linkki on johonkin uutiseen katson sieltä itse jutun. Ongelma on kuitenkin se että sivulla on uutisen lisäksi paljon muuta. Esim. menut, mainoksia ja muuta tekstiä. Kuinka pystyn täältä yleisesti löytämään itse uutisen. Katsoin hieman muutamien sivujen koodeja ja huomasin (niinkuin olettaa saattoi) että uutinen on yhteen div tai muun sisällä. Pystyisin tietenkin antamaan koodille ohjeet jokaisen sivun kohdalle mistä uutisen löytää mutta se on hieman hidasta ja hankalaa esim. jos Bingin api hakee 100,000 eri sivua niin niihin kaikkiin omien sääntöjen kirjoittaminen.

Eli ideanani on vähän auki. Teen toisen seuraavista.

Ensimmäiseksi haluaisin tehdä sovelluksen joka etsii uutisia ja tiivistää ne johonkin 10% alkuperäisestä pituudesta. Tässä on nyt ongelmana että koko uutisen haku sivulta on hieman hankalaa koska siellä on mainoksia, muita otsikoita ja tekstiä. Siis jos kone yrittäisi tiivistää jutun se saattaisi ottaa vahingossa jonkun toisen jutun otsikon luetuimmista sivulla olevasta palstasta. Uutiset etsittäisiin Bingkin APIa käyttäen.

Jos tämä on mahdotonta niin sitten teen vain sovelluksen joka käyttää Bing APIa ja näyttää tämän tiedot mutta haluaisin miellummin tehdä ylemmän idean.

Lebe80 [17.01.2018 15:33:29]

#

Mitäs jos tutkisit ensiksi googlella olisiko sinulle ihan valmista työkalua tunnistamaan nettisivuilta sisältöä

E1ss [17.01.2018 17:25:35]

#

Tuo taitaa olla juuri mitä etsin https://github.com/j0k3r/graby

En kuitenkaan ymmärrä miten saan käytettyä sitä. Mihin kirkoitan tuon composer komennon?

Lisäys:

Suoritin seuraavan komennon commandpromtissa:

C:\Users\User1>composer require j0k3r/graby
Using version ^1.12 for j0k3r/graby
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for j0k3r/graby ^1.12 -> satisfiable by j0k3r/graby[1.12.0].
    - j0k3r/graby 1.12.0 requires htmlawed/htmlawed dev-master -> satisfiable by htmlawed/htmlawed[dev-master] but these conflict with your requirements or minimum-stability.


Installation failed, deleting ./composer.json.

Sen jälkeen kokeilin tätä koodia:

<?

use Graby\Graby;

$article = "http://www.bbc.com/news/entertainment-arts-32547474";
$graby = new Graby();
$result = $graby->fetchContent($article);

var_dump($result);

?>

Ja tämä tulostettiin:

fetchContent($article); var_dump($result); ?>

Tietääkö joku mikä on pielessä?

E1ss [17.01.2018 19:29:37]

#

Eli ilmeisesti tuossa komentoriville kirjoittaessa tuli jo ongelma. Kokoeilin syöttää tämä komennon

composer require htmlawed/htmlawed

ja sitä se latasi hetken ja sen jälkeen yritin uudelleen alkuperäistä komentoa mutta ei vielläkään toiminut

Lisäys:

Nyt kirjoitin

composer require htmlawed/htmlawed dev-master

ja sen jälkeen sain onnistuneesti ladattua alkuperäisen juttun. Tulostus on kuitenkin edelleen sama eikä se ole siis toimiva. Eli xamppilla chorme tulostaa tämän

fetchContent($article); var_dump($result); ?>

Metabolix [17.01.2018 20:57:44]

#

Varmaan palvelimella ei ole short_open_tag käytössä, ja PHP-koodi pitäisi aloittaa merkinnällä <?php eikä <?. Tämä on yleisesti suositeltavaa, jotta koodi toimisi kyseisestä asetuksesta riippumatta.

E1ss [18.01.2018 08:39:04]

#

joo tuo toimi. mutta nyt se tulosti tämän

Fatal error: Uncaught Error: Class 'Graby\Graby' not found in C:\xampp3\htdocs\CN\test.php:6 Stack trace: #0 {main} thrown in C:\xampp3\htdocs\CN\test.php on line 6

miksi se ei muka löydä tätä Graby\Graby

Grez [18.01.2018 09:41:06]

#

Missä se Graby sulla siis on?

E1ss [18.01.2018 10:43:27]

#

Täällä on test.php eli oma koodini.

C:\xampp3\htdocs\CN

ja täällä on graby

C:\xampp3\htdocs\vendor\j0k3r\graby

Olen yrittänyt siirtää oman koodini samaan kansioon ja yläkansioihin mutta kaikissa on sama virhe.

groovyb [18.01.2018 14:01:09]

#

Composer on paketinhallintajärjestelmä PHP projekteihin, jolla lisätään projektiin ulkoisia kirjastoja. Eli sama kuin NodeJs -maailmassa npm, Rails -maailmassa Gem, C# -maailmassa nuget, Java -maailmassa Maven jne.

Composer tutorial

E1ss [18.01.2018 17:08:12]

#

Joo olen lukenut tuon mutta en ymmärrä että pitääkö se olla samassa kansiossa vai mitä. Ja onko ihan sama missä kohtaa console on kun suoritan composer require komennon? Voisiko joku vähän avata tätä minulle?

Lisäys: Miksi edes pitää commandpromtin kautta tehdä mitään. Enkö voi vain githubuista ladata ja sitten viedä se kansio oikeaan paikkaan ja hakea?

Lisäys: Näin nimittäin että joku teki netissä siten että hänellä oli vain yksi tiedosto ja yksi kansi samassa kansiossa. Hän pääsi tiedostosta käsiksi toisen tiedoston tietoihin

Metabolix [18.01.2018 17:19:30]

#

Oletko kuullut include-komennosta?

E1ss [18.01.2018 17:59:18]

#

Joo eli siis voinko vain ladata githubista koodit samaan kansioon kuin test.php koodini ja sitten vain inlucdaan tämän?

Lisäys: Eli onko se ihan sama käytänkö composer juttua ja use a vai include komentoa?

Metabolix [18.01.2018 22:34:22]

#

Composer, use ja include ovat kolme asiaa, jotka eivät mitenkään suoraan liity toisiinsa tai korvaa toisiaan.

Joka tapauksessa pitää liittää (include, include_once, require, require_once) jollain tavalla tiedosto, jossa luokka sijaitsee, ennen kuin voi käyttää luokkaa.

Jos tiedostoja on paljon, usein käytetään autoload-ominaisuutta, jossa esimerkiksi luokkaa Nimiavaruus_A\Luokka_B voitaisiin etsiä automaattisesti tiedostosta Luokat/Nimiavaruus_A/Luokka_B.php. Silloin include on siis piilotettu johonkin funktioon, ja itse tarvitsee liittää vain yksi tiedosto. Tästä vaihtoehdosta kerrotaan Composerin ohjeissa.

Sen sijaan use-rivi tarkoittaa, että koodissa käytetään jotain luokkaa jostain nimiavaruudesta niin, että ei tarvitse aina kirjoittaa Nimiavaruus_A\Luokka_B vaan riittää pelkkä Luokka_B.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta