slacky Skrevet 1. juli 2010 Del Skrevet 1. juli 2010 Heisann! Vel, jeg har et lite "behov"/ønske om å kunne hente en spesifikk linje/text, ut i fra en ekstern webside. Texten er vanligvis f. eks "ikke noe nytt", ellers vil den være noe ukjent. Det er da altså, hvis det er en "ukjent text", jeg skulle tro det blir vanskelig. Men, kan nevne at den "ukjente texten" starter ALTID likt. F.eks "idag har jeg..." Jeg så litt på muligheten ved å lagre kildekode i en txt-fil, deretter hente ut alt innhold, fra linje 730. Fikk ikke til noe.. da jeg har ingen kunskap til php-cURL. Men, virket også som en tungvindt måte? Men, om noe fungerer er jeg fornøyd! Ellers skulle en vel kunne bruke cURL evt. annet, eller kombi. For å søke gjennom en nettside etter en spesifikk text, og hente alt fra den linjen som inneholder den texten. Om den ikke fnnner texten, kan den returnere 0 Mvh - Jarl (: Lenke til kommentar
Runar Skrevet 1. juli 2010 Del Skrevet 1. juli 2010 Du kan bruke regulære uttrykk (og funksjoner som preg_match()) for å finne og hente ut enkelte deler av en nettside. Hvis du poster kildekoden du prøver å hente noe ut ifra, blir det enklere å forklare nøyaktig hvordan det kan gjøres. 1 Lenke til kommentar
slacky Skrevet 1. juli 2010 Forfatter Del Skrevet 1. juli 2010 Har løst saken nå. Var som du nevnte, bare å bruke preg_match(). Har en del kjenskap til fuksjonen, men gikk ikke opp for meg at jeg kunne bruke den slik. Tusen takk for hjelpen Lenke til kommentar
Runar Skrevet 1. juli 2010 Del Skrevet 1. juli 2010 Bare hyggelig! Tips: Hvis teksten du skal hente befinner seg i et element med en unik ID, som Tekst, er det mye enklere å finne riktig tekst. Lenke til kommentar
slacky Skrevet 1. juli 2010 Forfatter Del Skrevet 1. juli 2010 (endret) Skal huske det! Det vriende var, når jeg skulle hente innholdet mellom en td, som ikke så helt "fin ut".. <tr> <td>Noe text:</td> <td> Texten jeg skulle hente </td><br><b>Tid:</td><td>10:30 - 2nd of July (Tomorrow) </td> </tr> Som du ser så er koden veldig rotete, fikk til å hente den, ved å bruke /is, med en dikkelkode. preg_match("/Noe text:(.*) <\/td>/is", $html, $ip); Om jeg da hoppet over mellomrommene, så hentet den vidre text nedover. (Altså tilsvarende ingen ending). Diverse annen informasjon jeg tenkte hente, lot seg bare ikke gjøre, grunnet rotet i HTMLen. Jeg forsøkte å hente "tid" linjen.. Men, klarte ikke ende det da. Endret 1. juli 2010 av slacky Lenke til kommentar
Runar Skrevet 1. juli 2010 Del Skrevet 1. juli 2010 Hvis du poster litt mer av kildekoden (som for eksempel hele tabellen), kan jeg se om jeg får til noe! Du kan selvsagt sensurere all tekst hvis det skulle være nødvendig, så lenge selve tabellen og elementene er i sin opprinnelige form. Lenke til kommentar
slacky Skrevet 2. juli 2010 Forfatter Del Skrevet 2. juli 2010 (endret) Skal vi nå se.. Håper ikke "code"-saken brytes ned (blir for lang) <table class="id_infotable"><tr> </tr> <tr> <td>En sak:</td> <td> Info jeg fikk hentet på klomsemåte </td> </tr> <tr> <td>Tid:</td><td>(generelt bare detoen)Fikk ikke hentet (Tilhører dato: Tomorrow) </td> </tr> <tr> <td>Status:</td><td>Aktiv/eller ikke</td> </tr> </table> Vært kult om du fikk til.. Men, likte ikke klomsegreiene helt.. ønsker å hente de forskjellige delene vær for seg.. Egen preg_match() for vær, slik at jeg kan selv plassere innhold slik jeg vil ha det. Endret 2. juli 2010 av slacky Lenke til kommentar
Runar Skrevet 2. juli 2010 Del Skrevet 2. juli 2010 Regulære uttrykk er virkelig ikke min greie, men jeg kom da frem til noe som fungerer, med mindre koden varierer voldsomt fra den du har vist meg. Først kommer et fryktelig langt og sikkert ikke optimal regulært uttrykk. Alt skal være på samme linje, så hvis forumet lager flere linjer må du sørge for at det blir riktig hos deg. $pattern = '/<table class="id_infotable"><tr>[\s]*<\/tr>[\s]*<tr>[\s]*<td>([\w\s:]*)<\/td>[\s]*<td>(?P<info>[\w\s:]*)<\/td>[\s]*<\/tr>[\s]*<tr>[\s]*<td>([\w\s:<>\/]*)<\/td><td>(?P<tid>[\w\s-:\(\)]*)<\/td>[\s]*<\/tr>[\s]*<tr>[\s]*<td>([\w\s:]*)<\/td><td>(?P<status>[\w\s:\/]*)<\/td>[\s]*<\/tr>[\s]*<\/table>/'; Så følger koden for å vise resultatet. Jeg ga navn til noen av resultatene (info, tid og status) som kan brukes på følgende måte: preg_match( $pattern, $html, $matches ); echo "<ul> <li>Info: " . $matches['info'] . "</li> <li>Tid: " . $matches['tid'] . "</li> <li>Status: " . $matches['status'] . "</li> </ul>"; Alt dette resulterer i følgende (mellomrom, nye linjer og diverse annet er utelatt for å spare plass): Array ( [0] => // Hele tabellen, alt som fanges opp av uttrykket [info] => Info jeg fikk hentet på klomsemåte [1] => // Samme som info [tid] => (generelt bare detoen)Fikk ikke hentet (Tilhører dato: Tomorrow) [2] => // Samme som tid [status] => Aktiv/eller ikke [3] => // Samme som status ) Ikke vær redd for å si ifra hvis det ikke virker! (Merk at dette er kun et eksempel på hvordan det kan utføres. Ikke glem sikkerhetsrisikoen som følger med når du henter data (i form av ren HTML) fra eksterne nettsider.) 1 Lenke til kommentar
slacky Skrevet 2. juli 2010 Forfatter Del Skrevet 2. juli 2010 Takker og bukker, skal se nermere på dette når jeg kommer meg til min egen maskin. er trolig noen endringer jeg skal gjøre her og der, men ser ganske kompleks, og smart ut Lite spørsmål, hvordan går du frem med slike "lang" mellomrom? Finner det nok ut selv, om det skal være. Lenke til kommentar
Runar Skrevet 2. juli 2010 Del Skrevet 2. juli 2010 Lite spørsmål, hvordan går du frem med slike "lang" mellomrom? Finner det nok ut selv, om det skal være. Dette løste jeg ved å bruke (karakter)klassen \s, som visstnok skal dekke mellomrom, tab (\t) og nye linjer (\r og \n). Regular-Expressions.info er en flott nettside, dog litt tung for noen, med eksempler og artikler som forklarer regulære uttrykk. Den er absolutt verdt et besøk! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå