item toevoegen aan array op basis van inhoud rss feed...
Ik ben bezig met het maken van een applicatie om de inhoud van rss feeds op te halen op basis van trefwoorden.
Ik genereer een aantal trefwoorden die ik in een array stop. Deze array doorloop ik en gebruik ieder trefwoord als url variabele in het aanroepen van de rss feed.
Dan controleer ik of de rss feed de tag <item> bevat. Op dat moment wil ik een nieuwe array vullen met de trefwoorden die resultaten opleveren.
Uiteindelijk wil ik dan de items weergeven, mogelijk per trefwoord of alle trefwoorden bovenaan de pagina, dat maakt mij niet zoveel uit.
Ik heb de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') {
include("header.php");
//array voor verschillende zoekcriteria
$Searchcriteria = array();
//Tussendoor volgt er nog wat code om de array $Searchcriteria te vullen, maar dat is voor dit vraagstuk niet zo van belang, want dat werkt prima. De volgende code volgt:
// array die ik wil vullen met waarden uit de array $Searchcriteria op het moment dat de rss feed de tag item bevat.
$Foundsearchcriteria = array();
//array voor het vastleggen van de items uit de rss feed.
$Founditems = array();
// volgend stukje code haalt de rss feed op met als url-variabele de key_value en dan wil ik als tag item gevonden is de array $Foundsearchcriteria vullen.
foreach ($Searchcriteria as $key_name => $key_value) {
$rssfeed=simplexml_load_file("http://rss.......?variable=$key_value&....");
if( isset($rssfeed->channel->item) ) {
$Foundsearchcriteria[] = "$key_value";
}
}
foreach ($Foundsearchcriteria as $key_name => $key_value) {
echo "$key_value";
}
include ("footer.php");
} else {
include ("header.php");
include ("footer.php");
}
?>
include("header.php");
//array voor verschillende zoekcriteria
$Searchcriteria = array();
//Tussendoor volgt er nog wat code om de array $Searchcriteria te vullen, maar dat is voor dit vraagstuk niet zo van belang, want dat werkt prima. De volgende code volgt:
// array die ik wil vullen met waarden uit de array $Searchcriteria op het moment dat de rss feed de tag item bevat.
$Foundsearchcriteria = array();
//array voor het vastleggen van de items uit de rss feed.
$Founditems = array();
// volgend stukje code haalt de rss feed op met als url-variabele de key_value en dan wil ik als tag item gevonden is de array $Foundsearchcriteria vullen.
foreach ($Searchcriteria as $key_name => $key_value) {
$rssfeed=simplexml_load_file("http://rss.......?variable=$key_value&....");
if( isset($rssfeed->channel->item) ) {
$Foundsearchcriteria[] = "$key_value";
}
}
foreach ($Foundsearchcriteria as $key_name => $key_value) {
echo "$key_value";
}
include ("footer.php");
} else {
include ("header.php");
include ("footer.php");
}
?>
Het resultaat is niks op het scherm. Zelfs de footer.php wordt niet geinclude. Er gaat dus iets niet goed.
Op het moment dat ik het stukje
Code (php)
vervang voor
Code (php)
en de volgende foreach loop voorzie van commentaar tags, dan drukt php netjes in mijn browserscherm de zoekwoorden waarvoor een rssfeed met items gevonden is.
Het lijkt er dus op dat het if statement goed loopt, maar blijkbaar het vullen van mijn array met gevonden zoekwoorden dus niet.
Iemand een tip om dit op te lossen? Wat doe ik niet goed?
Met vriendelijke groet,
Sepp
Met vriendelijke groet,
Sepp.
Wat betreft jouw script, haal eens een print_r() over je arrays heen. Heb je verder geen foutmeldingen? Lijkt me stug... Nog wat, je kunt ook gewoon echo $key_value; doen.
Edit: Nog wat, bumpen is pas na 24 uur toegestaan.
Gewijzigd op 01/01/1970 01:00:00 door Arjan Schuurman
Dankjewel voor je reactie. Ik heb geprobeerd om de array af te drukken met print_r() al voordat ik mijn vraag stelde. Er komt geen uitkomst, scherm blijft wit. Er komt ook geen foutmelding naar voren. Er gebeurt gewoon niks.
Ik snap het toch eventjes niet. Ziet de code er in de basis goed uit?
De manier waarop ik mijn array vul in de foreach constructie:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// volgend stukje code haalt de rss feed op met als url-variabele de key_value en dan wil ik als tag item gevonden is de array
$Foundsearchcriteria vullen.
foreach ($Searchcriteria as $key_name => $key_value) {
$rssfeed=simplexml_load_file("http://rss.......?variable=$key_value&....");
if( isset($rssfeed->channel->item) ) {
$Foundsearchcriteria[] = "$key_value";
}
}
?>
// volgend stukje code haalt de rss feed op met als url-variabele de key_value en dan wil ik als tag item gevonden is de array
$Foundsearchcriteria vullen.
foreach ($Searchcriteria as $key_name => $key_value) {
$rssfeed=simplexml_load_file("http://rss.......?variable=$key_value&....");
if( isset($rssfeed->channel->item) ) {
$Foundsearchcriteria[] = "$key_value";
}
}
?>
is dat in de basis juist?
Zoals je in mijn code kunt zien en de vraag heb ik de echo $key_value; ook uitgevoerd en dat werkt.
Maar dus niet het vullen van mijn array met zoekwoorden die een rss feed teruggeven.
Heb ik dus in de basis het vullen van die array wel goed gedefinieerd?
Is die array dan ook beschikbaar buiten mijn foreach?
Bumpen is zelf een reactie plaatsen als er nog niemand anders wat heeft toegevoegd? Dan zal ik dat niet meer doen..:-)
Grt,
Sepp.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
// volgend stukje code haalt de rss feed op met als url-variabele de key_value en dan wil ik als tag item gevonden is de array
$Foundsearchcriteria = array();
foreach ($Searchcriteria as $key_name => $key_value)
{
$rssfeed = simplexml_load_file('http://rss.......?variable=' . $key_value . '&....');
if( isset($rssfeed->channel->item) )
{
$Foundsearchcriteria[] = $key_value;
}
}
?>
// volgend stukje code haalt de rss feed op met als url-variabele de key_value en dan wil ik als tag item gevonden is de array
$Foundsearchcriteria = array();
foreach ($Searchcriteria as $key_name => $key_value)
{
$rssfeed = simplexml_load_file('http://rss.......?variable=' . $key_value . '&....');
if( isset($rssfeed->channel->item) )
{
$Foundsearchcriteria[] = $key_value;
}
}
?>
Dankjewel voor je reactie. Ik zie dat je de variabele $key_value uit mijn rss feed string hebt getrokken. En de $key_value zonder "" hebt gedefinieerd.
De tweede optie had ik over het hoofd gezien...:-)
Als ik mij vergis, zeg het dan, maar het uitsplitsen van de rss feed url in twee strings en de variabele lijkt voornamelijk een syntax dingetje dan dat het werkelijk een verschil in functioneren is, klopt dat?
Als ik $Foundsearchcriteria[] = $key_value; in de foreach vervang voor echo $key_value; dan werkt het prima. De trefwoorden waarvoor een rss feed met inhoud worden teruggegeven aan de browser en op het scherm getoond.
Dus de isset werkt, maar het toevoegen aan de array d.m.v.
$Foundsearchcriteria[] = $key_value
niet.
Voeg ik daarachter print_r($Foundsearchcriteria); toe of zelfs een nieuwe foreach om de trefwoorden uit de array af te drukken, blijft het scherm na mijn geinclude header blanco en zelfs mijn footer.php wordt niet getoond.
Er gaat dus iets mis, maar wat snap ik nog niet. Nog een idee?
Ik heb nu om te testen een deel van de code uit mijn volledige code gehaald en dat ziet er zo uit.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') {
include("header.php");
//array voor verschillende zoekcriteria. Die wordt op een andere manier gevuld, maar even voor de verkorte code om te testen zelf even gedefinieerd met wat trefwoorden.
$Searchcriteria = array("trefwoord1","trefwoord2","trefwoord3","trefwoord4");
// array die ik wil vullen met waarden uit de array $Searchcriteria op het moment dat de rss feed de tag item bevat.
$Foundsearchcriteria = array();
//array voor het vastleggen van de items uit de rss feed.
$Founditems = array();
foreach ($Searchcriteria as $key_name => $key_value)
{
$rssfeed = simplexml_load_file('http://rss.......?variable=' . $key_value . '&....');
if( isset($rssfeed->channel->item) )
{
$Foundsearchcriteria[] = $key_value;
foreach ($rss->channel->item as $item) {
$Founditems[] = $item;
}
}
}
foreach ($Foundsearchcriteria as $key_name => $key_value)
{
echo $key_value;
}
include ("footer.php");
} else {
include ("header.php");
include ("footer.php");
}
?>
include("header.php");
//array voor verschillende zoekcriteria. Die wordt op een andere manier gevuld, maar even voor de verkorte code om te testen zelf even gedefinieerd met wat trefwoorden.
$Searchcriteria = array("trefwoord1","trefwoord2","trefwoord3","trefwoord4");
// array die ik wil vullen met waarden uit de array $Searchcriteria op het moment dat de rss feed de tag item bevat.
$Foundsearchcriteria = array();
//array voor het vastleggen van de items uit de rss feed.
$Founditems = array();
foreach ($Searchcriteria as $key_name => $key_value)
{
$rssfeed = simplexml_load_file('http://rss.......?variable=' . $key_value . '&....');
if( isset($rssfeed->channel->item) )
{
$Foundsearchcriteria[] = $key_value;
foreach ($rss->channel->item as $item) {
$Founditems[] = $item;
}
}
}
foreach ($Foundsearchcriteria as $key_name => $key_value)
{
echo $key_value;
}
include ("footer.php");
} else {
include ("header.php");
include ("footer.php");
}
?>
Helaas werkt dit niet. Nog enig idee?
Wederom dank!
Grt,
Sepp
Gewijzigd op 01/01/1970 01:00:00 door seppie
seppie schreef op 09.02.2009 21:14:
Ik zie dat je de variabele $key_value uit mijn rss feed string hebt getrokken. En de $key_value zonder "" hebt gedefinieerd.
Ik heb slecht de $vars buiten de quotes gehaald en in de juiste syntax neergezet.
seppie schreef op 09.02.2009 21:14:
Als ik $Foundsearchcriteria[] = $key_value; in de foreach vervang voor echo $key_value; dan werkt het prima. Dus de isset werkt, maar het toevoegen aan de array d.m.v.
$Foundsearchcriteria[] = $key_value niet.
$Foundsearchcriteria[] = $key_value niet.
Als de echo de juiste info geeft dan moet het werken.
Zet dit bovenin je script.
Dankjewel voor de extra code om te debuggen. Ik ben nu al wel een stuk verder gekomen met de analyse.
Wat ik nu krijg, is een dikke vette "internal server error 500"...:-)
Ik heb mijn code zover aangepast dat het prima werkt, zolang ik niet teveel trefwoorden in mijn array $Searchcriteria stop.
Het lijkt er denk ik op dat op een of andere manier het geheugen vol loopt? Of dat er iets anders niet goed gaat, maar de code werkt, zolang het aantal trefwoorden met waarschijnlijk daar aan ook de gekoppelde items uit de rss feed niet over een bepaalde grootte heen gaat.
Is er een mogelijkheid om toch een groot aantal trefwoorden in mijn array $Searchcriteria te hebben, de rss feed aan te roepen met ieder trefwoord uit mijn array, dan de inhoud van de rss feed in een array te stoppen en deze dan naar de browser te sturen zonder een internal server error?
Of moet ik gaan kijken naar het gedeeltelijk uitvoeren van de foreach loop met maar een klein aantal trefwoorden, de gegevens naar een bestand wegschrijven en dan weer een volgend setje trefwoorden naar de rss feed sturen, het resultaat toevoegen aan het bestaande bestand, etc, etc.?
Zo ja, kun je mij daar wat tips over geven hoe dit aan te pakken?
Grt,
Sepp.
Hieronder de code zoals die werkt met een beperkt aantal trefwoorden en /of een beperkt resultaat. Dat zal wel samenhangen...:-)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$zoekwoord = trim($_POST["zoekwoord"]);
include ("header.php");
$Searchcriteria = array("trefwoord","trefwoord","trefwoord","trefwoord","trefwoord","trefwoord","trefwoord","trefwoord","trefwoord");
//array met tefwoorden waar er resultaten in de rss feed aanwezig zijn...
$Foundsearchcriteria = array();
//array met alle gevonden items voor het trefwoord...
$Founditems = array();
foreach ($Searchcriteria as $key_name => $key_value)
{
$rssfeed=simplexml_load_file('http://rss....' . $key_value . '...');
if( isset($rssfeed->channel->item) )
{
$Foundsearchcriteria[] = $key_value;
foreach ($rssfeed->channel->item as $item) {
$Founditems[] = $item;
}
}
}
foreach ($Foundsearchcriteria as $key_name => $key_value)
{
echo "woord: ".$key_value;
}
foreach ($Founditems as $key_name => $key_value)
{
echo "advertentie: ".$key_value->description;
}
include ("footer.php");
} else {
include ("header.php");
include ("footer.php");
}
?>
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$zoekwoord = trim($_POST["zoekwoord"]);
include ("header.php");
$Searchcriteria = array("trefwoord","trefwoord","trefwoord","trefwoord","trefwoord","trefwoord","trefwoord","trefwoord","trefwoord");
//array met tefwoorden waar er resultaten in de rss feed aanwezig zijn...
$Foundsearchcriteria = array();
//array met alle gevonden items voor het trefwoord...
$Founditems = array();
foreach ($Searchcriteria as $key_name => $key_value)
{
$rssfeed=simplexml_load_file('http://rss....' . $key_value . '...');
if( isset($rssfeed->channel->item) )
{
$Foundsearchcriteria[] = $key_value;
foreach ($rssfeed->channel->item as $item) {
$Founditems[] = $item;
}
}
}
foreach ($Foundsearchcriteria as $key_name => $key_value)
{
echo "woord: ".$key_value;
}
foreach ($Founditems as $key_name => $key_value)
{
echo "advertentie: ".$key_value->description;
}
include ("footer.php");
} else {
include ("header.php");
include ("footer.php");
}
?>
Gewijzigd op 01/01/1970 01:00:00 door seppie
Het lijkt er toch op een of andere manier op dat er iets met het geheugen of een andere instelling van de server iets gedaan moet worden dat het wel werkt.
kan ik met de phpinfo(); daar wat verschillen in kunnen aantreffen?