Visualizzazione risultati 1 fino 11 di 11

Discussione: [PHP] Classe wikipedia

  1. #1
    Guest

    Post [PHP] Classe wikipedia

    Ciao a tutti, sto creando una classe wikipedia che mi dovrà dare come risultato 2 variabili ($h1 e $p) dove $h1 è il titolo, e $p è il primo riassunto/paragrafo... (per capirci prima del blocco riassuntivo della pagina di wikipedia)...
    Sto cercando di crearla... ma non funziona già ad incipit. Dov'è il problema?
    api.php
    Codice PHP:
    <?
    class wikipedia() {
    global
    $_GET,$q,$name;

    function
    validate($name) {
    $q = trim(htmlspecialchars($name));
    $q = str_replace(" ","",$q);
    $q = ucfirst($q);
    return
    $q;
    }

    function
    open($q) {
    $file = file("http://it.wikipedia.org/wiki/".$this->validate($q)."");
    return
    $file;
    }

    function
    h1($q) {
    preg_match("<h1 id=\"firstHeading\" class=\"firstHeading\">(.+)</h1>",$this->open($q),$h1);
    return
    $h1[0];
    }

    function
    get($q) {
    $q = $this->validate($q);
    $open = $this->open($q);
    $page["h1"] = $this->h1($open);
    return
    $page;
    }

    }
    ?>
    index.php
    Codice PHP:
    if($_GET["q"]) {
    require(
    "api.php");
    $wiki = new wikipedia();
    print_r($wiki->get(q));
    }
    Grazie mille... ciaoooo! ^^"

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,273

    Predefinito

    Credo che il problema sia nel fatto che la funzione file(), così come fopen() e file_get_contents() qui su altervista non possono puntare a domini esterni!
    Codice PHP:
    $file = file("http://it.wikipedia.org/wiki/".$this->validate($q)."");
    Prova ad usare la fsokopen() oppure le curl

    Ciao!

  3. #3
    L'avatar di ptm
    ptm
    ptm non è connesso Utente
    Data registrazione
    04-08-2007
    Residenza
    Bergamo
    Messaggi
    124

    Predefinito

    Inoltre la keyword global va definita per le funzioni e non per l'intera classe...

  4. #4
    Guest

    Predefinito

    @alemoppo: Io lo sto usando il locale, quindi non ho questo problema...
    @ptm: e come dovrei fare allora? xD

  5. #5
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Vedendo queste 2 righe:
    Codice PHP:
    class wikipedia() {
    global
    $_GET,$q,$name;
    Ti consiglio di rivederti la programmazione ad oggeti in php ( e poi $_GET è superglobale) ...
    E non solo per quelle 2 righe.

  6. #6
    Guest

    Predefinito

    Diciamo che ho trovato una soluzione... però non funziona il preg_match
    Codice PHP:
    $preg = preg_match("/<h1 id=\"firstHeading\" class=\"firstHeading\">(.+)</h1>/",$file,$h1);
    Warning: preg_match() [function.preg-match]: Unknown modifier 'h' in index.php on line 28
    Grazie mille! ^^"

  7. #7
    Guest

    Predefinito

    Codice PHP:
    $preg = preg_match("/<h1 id=\"firstHeading\" class=\"firstHeading\">(.+)<\/h1>/",$file,$h1);
    Essendo lo / il delimitatore dell'espressione regolare, devi stare attento a farne l'escape nel caso lo volessi usare come carattere normale (quindi "\/h1").

    Ciao!

    P.S.: Comunque ti consiglio di seguire il suggerimento di javascripter, in quanto il tuo codice è sbagliato sintatticamente sia alla linea 2 che alla 3.

  8. #8
    Guest

    Predefinito

    Molto bene ho risolto, ma ho sempre un altro problema.
    Devo rimuovere tutti i link del tipo:
    Codice:
    <a href="/wiki/{url}" title="{titolo}">{scritta}</a>
    E sostituirli con {scritta}... ecco cosa sto facendo:
    Codice PHP:
    $text = preg_replace("/<a href=\"\/wiki\/(.+)\" title=\"(.+)\">(.+)<\/a>/","\3",$p["1"]);
    Il risultato è ... il link non viene convertito e la parte dopo il link salta...
    Dove sbaglio? Grazie mille!! =)
    Ultima modifica di sIM : 27-04-2010 alle ore 15.56.16

  9. #9
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    L'errore è questo:
    Codice:
    \3
    Sostituiscilo in \\3:
    Codice PHP:
    $text = preg_replace("/<a href=\"\/wiki\/(.+)\" title=\"(.+)\">(.+)<\/a>/","\\3",$p["1"]);
    P.S. Se hai problemi con la regexp ( ad esempi .+ prende più di quanto deve prendere) aggiungi il modificatore U alla regexp
    Ultima modifica di javascripter : 27-04-2010 alle ore 18.16.36

  10. #10
    Guest

    Predefinito

    Se provo a cercare qualsiasi cosa ad esempio ho provato con zeus:
    Zeus (in Quercia" class="mw-redirect.
    Invece senza la funzione:
    Codice PHP:
    <b>Zeus</b> (in <a href="/wiki/Lingua_greca" title="Lingua greca">greco</a> <i>&#918;εύς</i><sup id="cite_ref-0" class="reference"><a href="#cite_note-0">[1]</a></sup>) nella <a href="/wiki/Mitologia_greca" title="Mitologia greca">mitologia greca</a> è il re e padre degli Dei, il sovrano dell'<a href="/wiki/Olimpo_(mitologia)" title="Olimpo (mitologia)" class="mw-redirect">Olimpo</a>, il dio del <a href="/wiki/Cielo" title="Cielo">cielo</a> e del <a href="/wiki/Tuono" title="Tuono">tuono</a>. I suoi simboli sono la <a href="/wiki/Fulmine" title="Fulmine">folgore</a>, il <a href="/wiki/Bos_taurus" title="Bos taurus">toro</a>, l'<a href="/wiki/Aquila_chrysaetos" title="Aquila chrysaetos">aquila</a> e la <a href="/wiki/Quercia" title="Quercia" class="mw-redirect">quercia</a>.
    In pratica tutti i collegamenti devono essere trasformati in semplice testo...
    Grazie mille! =)

  11. #11
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Ma te l'ho detto, aggiungi il modificatore U:
    Codice:
    /<a href=\"\/wiki\/(.+)\" title=\"(.+)\">(.+)<\/a>/U
    Non dovresti avere problemi.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •