Gå til innhold

Litt cURL hjelp, takk! :p


Anbefalte innlegg

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
Videoannonse
Annonse

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 av slacky
Lenke til kommentar

Skal vi nå se.. Håper ikke "code"-saken brytes ned (blir for lang) :p

 

	<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 av slacky
Lenke til kommentar

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.)

  • Liker 1
Lenke til kommentar

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...