Hei,
Kerron ensin taustaa ongelmaan liittyen, josko se auttaisi ongelman ratkaisemisessa...
Sivuni ideana on hakea sivun x rss syötteet (Tässä tapauksessa rss syötteenä toimii feeds.feedburner.com/NelonenNettiTVUusimmat) ja tallentaa saadut ohjelmat tietokantaan. (http://netti-tv.net/nelosenohjelmat)
Kaikki toimii tähän saakka hyvin, mutta itse sivu joka tulostaa saadun syötteen, kusee urakalla. (http://netti-tv.net/nelonenn) Ainoan asian jonka kyseinen sivu osaa tulostaa oikein on ohjelman nimen. Kuvat/linkit eivät siis linkitä oikeisiin videoihin...( Olen huomannut, että kuvat/linkit perustuvat vanhimpaan ohjelmaan, joka löytyy rss syötteestä (feeds.feedburner.com/NelonenNettiTVUusimmat))
http://pastebin.com/5LqZn76H <- Tuossa on koodi jota käytän tällä hetkellä. (Simple Pie) Jos nyt en ihan täysin erehdy niin uskon, että ongelma on rivillä 186-192. (kyseisen koodinpätkän tarkoitus on poimia ohjelman kuvauksesta ohjelman kuva) Mutta siitä eteenpäin olen aivan pihalla. Olen miettinyt vaihtoehtoa, että tuon koodin (186-192) siirtäisi riville 197, jolloin se ymmärtäisi hakea jokaisesta ohjelmasta erikseen kuvan, mutta en millään saa sitä toimimaan.
En ole todellakaan mikään ammattilainen php:ssä ja siksi toivon, että joku teistä voisi auttaa ongelmani kanssa. Pahoittelut tekstin epäselvyydestä, koitin kiteyttää ongelman mahdollisimman lyhyeksi (ja todennäköisesti onnistuin siinä surkeasti).
Koodisi rivit 186-192 ovat joka tapauksessa väärässä paikassa. Sinun pitäisi tehdä kaikki nuo asiat jo ennen riviä 79 niin, että kaikki tarvittavat tiedot päätyvät $savedItems-taulukkoon. Riviltä 195 alkavassa foreach-silmukassa taas ei pidä käyttää muuttujaa $i eikä $image. Silmukassa pitää käyttää vain muuttujaa $item, johon foreach ottaa tiedot $savedItems-taulukosta. Muuttuja siis sisältää täsmälleen ne asiat, jotka rivin 79 paikkeilla on laitettu muuttujan $i kautta $savedItems-taulukkoon.
Kiitos kovasti vastauksestasi.
Siirsin kyseisen koodinpätkän nyt riville 79 ja poistin rivit 75,79(http://pastebin.com/L2rDBEvX - Rivi 79 muuttui 137, koska entisestä versiosta piti siirtää rivit 114-183 ylemmäs. Samaan aikaan huomasin, että rivit 141-151 oli turha, koska kyseinen komento löytyi jo ylempää)
Muuttamalla kertomasi koodinpätkät sain nyt linkityksen pelittämään, mutta kuva ei vieläkään näy. Oletan, että rivit 140-142 ovat tällä kertaa väärässä paikassa?
Tarkoititko tämän $image muuttujan vaihtamista riviltä 183 tämän kaltaiseen ratkaisuun:
Eli rivit 141-142 tähän muotoon:
urlencode($i['kuva'] = returnImage($feedDescription)); $i['kuva'] = scrapeImage($i['kuva']);
Ja rivi 183:
...src="' .$i['kuva']. '"...
Itse kun tätä yritin niin en saanut toimimaan (kenties osaamattomuuteni takia).
Kiitos paljon, että viitsit auttaa ongelmani kanssa. Kun kyseiset sivut ovat aika lähellä sydäntäni. :)
Kyllä, juuri tuota tarkoitin, paitsi tietenkin echo-vaiheessa kuuluu olla $item eikä $i.
Tuossa muuten urlencode-kutsu on väärin, koska tuolla tavalla se ei tee mitään. Ota urlencode pois. Jos ilmenee, että tarvitset sitä kuitenkin, laita se scrapeImage-riville heti =-merkin jälkeen tai vasta echo-riville.
Jep, epähuomiossa olin kopioinut tuohonkin komennon echo riville. Kiitos huomautuksesta.
Muutin nyt kyseiset koodit muotoon:
$feedDescription = $item->get_description(); $i['kuva'] = returnImage($feedDescription); $i['kuva'] = urlencode(scrapeImage($i['kuva']));
ja rivin 183 muotoon
...src="' .$item['kuva']. '"...
Mutta vieläkään ei toimi...Koodi kokonaisuudessaan:
http://pastebin.com/gExArvGC
Sinun pitää tietenkin myös poistaa koodin luoma tiedosto ($savedItemsFilename), jotta muutoksesi näkyvät. Jos senkään jälkeen koodi ei toimi, kerro edes, mitä se tekee ja mitä sen pitäisi tehdä.
Tosiaan "$savedItemsFilename" tarkoitus on luoda tietokanta, jonne saadut ohjelmat tallennetaan 7 päiväksi. (Koska rss syöte pitää tiedostoja noin 2 päivää)
Kuitenki kommenttisi takia tajusin, että koko "nelosenohjelma.php" pitää päivittää, ja sen jälkee alkoi lopulta pelittämään.
Kiitos todella paljon avusta, en olisi saanut ongelmaa ratkaistua ilman teitä.
Jos voin vielä kysyä neuvoa erääseen asiaan:
Tällä hetkellä kuvat haetaan rss syötteestä, joka hidastaa sivujen lataamista huomattavasti. Onko jotenkin mahdollista saada kuvat tallentumaan omaan palvelimeeni, jolloin sivun latautumisen pitäisi nopeutua...Ilmeisesti cURL käyttäminen saattaisi toimia, mutta onko muita tapoja? Sillä olen kyseistä koodia pyöritellyt, ilman mitään tulosta...
Kiitos vielä paljon avusta!
Miksi oletat, että kuvien siirto omalle palvelimellesi nopeuttaisi sivun lataamista? Useinhan kuvat laitetaan tarkoituksella eri palvelimelle kuin sivut juuri latauksen nopeuttamiseksi, ja voisi kuvitella, että oikeilla tv-yhtiöillä olisi paremmat palvelimet kuin harrastelijalla.
Onko sivustosi julkinen? Silloin kuvien kopiointi rikkoo käyttöehtoja lähes varmasti, ja myös ohjelmatietojen kopiointi voi olla käyttöehtojen vastaista.
Jos nämä asiat ovat kunnossa, voit ladata kuvat funktiolla file_get_contents, jos sitä ei ole palvelimellasi erikseen estetty, ja tallentaa funktiolla file_put_contents. Kuville pitää luoda järkevät tiedostonimet (esim. $id-muuttujan avulla) ja tiedostopäätteet, jotta palvelimesi osaa lähettää ne oikein. Yksinkertaisinta on ladata vain sellaiset kuvat, joiden tiedostopääte vaikuttaa järkevältä.
$i['kuva'] = returnImage($feedDescription); $i['kuva'] = scrapeImage($i['kuva']); // Tunnistetaan pääte. $ext = preg_replace("/.*\\./s", "", $i["kuva"]); if (in_array($ext, array("jpg", "jpeg", "png", "gif"))) { // Yritetään ladata kuva. $data = @file_get_contents($i["kuva"]); // Tarkistetaan, että latauksen tulos on kuva eikä esim. virhesivu. if ($data && preg_grep("/^Content-Type:\\s*image/i", $http_response_header)) { // Tallennetaan kuva. $i["kuva"] = "kuva_{$id}.{$ext}"; file_put_contents($i["kuva"], $data); } } $i['kuva'] = urlencode($i['kuva']); // urlencode vasta tässä tai echo-rivillä!
En ajatellut asiaa koskaa tuolta kantilta, kiitos selvennyksestä. Kuvittelin aina, että kuvien haku sivulta x olisi hitaampaa, kuin se että kuvat olisivat omalla palvelimella. Selvästikkään asia ei ole näin ja tämä on hyvä tietää tulevaisuutta silmällä pitäen.
Kiitos silti koodista jonka annoit. Se toimi loistavasti ja saatan tulla käyttämään sitä tulevissa projekteissa, joissa nuo tekijänoikeus asiat on helpompi hoitaa.
Yhteenvetona: Suurkiitos avusta. En olisi saanut ongelmaa ratkaistua ilman teidän apua.
Aihe on jo aika vanha, joten et voi enää vastata siihen.