Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odczyt określonych treści z pliku txt
Forum PHP.pl > Forum > Przedszkole
wiktor1984
Jak wydobyć z pliku txt określoną treść na przykład nagłówek h1

Potrzebuję napisać jakiś prosty skrypt do importu ogłoszeń na moją stronę.
Żeby nie było wszystko legalnie.

Wykombinowałem że zapisuje stronę w pliku txt tym:


  1. $file = fopen("page.txt", "w");
  2. $c = curl_init();
  3. curl_setopt($c, CURLOPT_URL, "http://strona.pl");
  4. curl_setopt($c, CURLOPT_FILE, $file);
  5. curl_exec($c);
  6. curl_close($c);
  7. fclose($file);


a jak wydobyć z tego pliku np nagłówek h1

Proszę tylko o nakierowanie






kujol
Wyrażenia regularne.
wiktor1984
właśnie doszedłem do tego i czytam o wyrażeniach


Znalazłem coś takiego

Jak dla mnie czarna magia
wystarczy to jakoś zmodyfikować i powinno działać
Nawet nie wiem od czego zacząć?


<?php
// pobranie nazwy hosta z adresu URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.funkcje.net/index.html", $matches);
$host = $matches[1];

// pobranie dwóch ostatnich segmentów nazwy hosta
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>


Może nie do końca to to o co mi chodzi ale kierunek dobry

Ps

I jeszcze coś takiego



$html = file_get_contents( 'adres_strony' );
preg_match_all( '@<td class="center">(\d+)</td>@si', $html, $matches );
var_dump( $matches );
Kloc
Cos zmienic i bedzie git, ale bez wglądu w twoj kod nic nie bedziemy strzelac.

  1. <?php
  2. $subject = "Twoj kod z pliku" ;
  3. $pattern = '/\<h\>(.+)\</h\>/' ;
  4. preg_match( $pattern, $subject, $matches);
  5. print_r ($matches );
  6. ?>
wiktor1984
Cytat(Kloc @ 6.01.2015, 23:27:44 ) *
Cos zmienic i bedzie git, ale bez wglądu w twoj kod nic nie bedziemy strzelac.

  1. <?php
  2. $subject = "Twoj kod z pliku" ;
  3. $pattern = '/\<h\>(.+)\</h\>/' ;
  4. preg_match( $pattern, $subject, $matches);
  5. print_r ($matches );
  6. ?>




Kodu jeszcze brak to dopiero moje przemyślenia.
Na php znam się słabo.

Popraw mnie jeśli się mylę:

$subject (do tej zmiennej należy załadować utworzoną kopie strony z pliku txt
$pattern (między jakimi znakami funkcja ma wyszukać treść
$matches (wynik wyszukania)
phpion
Po co rzeźbić samodzielnie skoro są już gotowe narzędzia do tego? Przykładowo QueryPath. Na stronie głównej dokumentacji masz dobry przykład dla siebie:
  1. require 'QueryPath/QueryPath.php';
  2.  
  3. // URL to fetch:
  4. $url = 'http://technosophos.com';
  5.  
  6. print qp($url, 'title')->text();
Kloc
  1. <?Php
  2.  
  3. $zmienna = 'abcdefgh1024ijklmnoprstuwyz';
  4. $wzor = '/\D+(\d{4})\D+/'; //chce wyciagnac liczbe pomiedzy literami
  5. preg_match($wzor, $zmienna, $wynik);
  6. print_r($wynik);
  7.  
  8. echo 'WYNIK: '.$wynik[1];
  9.  
  10. ?>


Prosty przykład, żebyś zakapował jak to działa.
wiktor1984
Ok Dzięki za odpowiedzi
Będę doczytywał i kombinował

................................................................................

  1. <?Php
  2.  
  3.  
  4. $html = file_get_contents( 'Jakaś strona' );
  5.  
  6.  
  7.  
  8. $zmienna = $html;
  9.  
  10. preg_match('/title(.*?)title/is', $zmienna, $wynik);
  11. print_r($wynik);
  12.  
  13.  
  14.  
  15.  
  16.  
  17. ?>


Działa:) wyszukuje i wypisuje

Ale mam mały problem

title OK
<title> lub <\title> już nie

jak umieścić we wzorze te znaki aby było ok
</>
(
viking
Parsujesz DOM więc phpion dał ci najlepszą możliwą odpowiedź. W regexpach zawsze coś się może posypać, i będziesz miał jeszcze 1000 pytań jak coś pobrać dla tego akurat przypadku.
wiktor1984
Tylko to co podał phpion
Nawet nie doszedłem do tego jak ten plik pobrać...

A ten prosty kawałek kodu ściąga to co chcę cenę, tytuł, opis
I to mi wystarczy
Proste banalne i testowałem już na kilkudziesięciu stronach i ok

Tylko nie wiem np aby w title zaczynało od title a kończyło na (


................................................................


Przedstawiam skrybcik jeszcze nie dokończony
i pewnie jak ktoś kod zobaczy to się przerazi ale działaexclamation.gifsmile.gif
Może komuś się przyda

Jestem już prawie przy końcu ale mam problem z kodowaniem
I prosił bym o pomoc
na stronie kodowanie jest ok po wgraniu do bazy danych już nie

W bazie danych jest utf8_polish_ci a na stronie utf-8

Ma Ktoś jakiś pomysł jak to naprawić

Plik import.php

  1. <html>
  2. <head>
  3. <meta charset="utf8">
  4. <title></title>
  5. </head>
  6. <body>
  7.  
  8. <?Php
  9.  
  10. $url= $_POST["www"];
  11. $html = @file_get_contents($url);
  12.  
  13. $zmiennatitle = $html;
  14. preg_match('/<title>(.*?)</is', $zmiennatitle, $wyniktitle);
  15. echo 'Tytuł: '.$wyniktitle[1];
  16.  
  17. echo '<br>';
  18.  
  19. $zmiennacena = $html;
  20. preg_match('/<em>(.*?)em/is', $zmiennacena, $wynikcena);
  21. echo 'Cena: '.$wynikcena[1];
  22.  
  23. echo '<br><br>';
  24.  
  25. $zmiennaopis1 = $html;
  26. preg_match('/<div class="resetcss"><p><span style="font-size: small;">(.*?)</is', $zmiennaopis1, $wynikopis1);
  27. echo 'Opis1: '.$wynikopis1[1];
  28.  
  29. echo '<br>';
  30.  
  31. $zmiennaopis2 = $html;
  32. preg_match('/Skład materiałowy(.*?)</is', $zmiennaopis2, $wynikopis2);
  33. echo 'Opis2: '.$wynikopis2[1];
  34.  
  35. ?>
  36. <br><br><br>
  37. <a href="import.html">import.html</a>
  38. <br><br><br>
  39.  
  40.  
  41. <?php
  42. $connection = @mysql_connect('xxx', 'xxx', 'xxx')
  43. or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  44. $db = @mysql_select_db('xxx', $connection)
  45. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  46. ?>
  47.  
  48. <br><br><br>
  49.  
  50. <?php
  51.  
  52.  
  53. $db="INSERT INTO announcements (annoucement_title) VALUES ('$wyniktitle[1]')";
  54. if (!mysql_query($db,$connection))
  55. {
  56. die('Błąd: ' . mysql_error());
  57. }
  58. echo 'Ogłoszenie zostało dodane';
  59.  
  60. ?>
  61.  
  62. </body>
  63. </html>


Plik import.html

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title></title>
  5. </head>
  6. <body>
  7.  
  8. <form action="import.php" method="post">
  9.  
  10. Adres strony:<br />
  11.  
  12. <input name="www" value="" /><br />
  13.  
  14. <input type="submit" value="Wyślij" name="submit" />
  15.  
  16. </div>
  17.  
  18. </form>
  19.  
  20. </body>
  21. </html>
Kloc
Cytat
jak umieścić we wzorze te znaki aby było ok
</>


Poprzedź je znakiem ucieczki "\"

\<title\> i \</title\>
wiktor1984
dzięki działa
A z kodowaniem też sobie już poradziłem wystarczyło dodać w zapytaniu mysql_query('set character set utf8');
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.