Ergebnis 1 bis 1 von 1

Thema: [PHP] Eigene flickr-Bilder automatisch herunterladen

  1. #1
    TP-Veteran Avatar von Dittboy
    Registriert seit
    Jan 2003
    Beiträge
    1.362

    Arrow [PHP] Eigene flickr-Bilder automatisch herunterladen

    Hi!

    Da ich 195 von 200 möglichen (kostenfrei) Bildern bei flickr hochgeladen habe und ich auch etwas gegen die Zensur habe, habe ich mir ein Skript geschrieben, das meine Bilder bei flickr automatisch herunterlädt und speichert. Außerdem hatte ich von den meisten Fotos nicht mehr die bearbeiteten Originale.


    Zum Skript:

    Ihr braucht erstmal einen flickr-API-Key, damit ihr die API von flickr benutzen könnt. Zusätzlich braucht ihr noch eure User-ID. Die Daten könnt ihr dann unter "Konfiguration" eintragen.

    Die Bilder werden dann von alt nach neu mit einer aufsteigenden ID versehen. Wenn ihr möchtet könnt ihr die Bilder mit dieser ID oder der flickr-ID speichern und selbst definierte Anhängsel erstellen (_o, _klein etc.), damit ihr die Bilder in einem Ordner speichern könnt. Diesen Ordner könnt ihr auch noch definieren.

    Es werden nicht alle Bilder auf einmal heruntergeladen, sondern schrittweise. Wenn ihr die Originalfotos kopieren wollt hat sich eine Größe von 10 Bildern pro Seite bewährt, da das Skript sonst recht lange braucht. Ihr könnt einfach auf die Seitenzahlen klicken um zwischen den Seiten zu wechseln.

    Zusätzlich könnt ihr noch bestimmen, welche größen der Bilder ihr speichern wollt.

    Wenn ihr das Skript ändern wollt könnt ihr es machen und auch hier reinstellen, wenn ihr möchtet. Es darf auch weitergegeben werden. Ihr dürft damit also machen was ihr wollt.

    Fragen können auch gerne gestellt werden.

    Mfg
    Dittboy

    PHP-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <meta http-equiv="content-type" content="text/html; utf-8">
        <title>flickr Fotos speichern</title>
    </head>
    <body>

    <?php
    ############Konfiguration
    #########################

    #Benutzerdaten
    $conf_api_key 'foo'#Dein API-Key (http://flickr.com/services/api/keys/)
    $conf_user_id 'bar'#Deine User-ID (http://idgettr.com/)

    #Welche Bilder speichern? (0=nein, 1=ja)
    $save_o '1';        #Originalbilder speichern
    $save_75 '1';        #75px Bilder speichern
    $save_100 '1';    #100px Bilder speichern
    $save_240 '1';    #240px Bilder speichern
    $save_500 '1';    #500px Bilder speichern

    #Ordner
    $folder_o './fotos/original/';    #Ordner für die Originalbilder
    $folder_75 './fotos/75/';        #Ordner für die Icons (75x75)
    $folder_100 './fotos/100/';        #Ordner für die Thumbnails (100px)
    $folder_240 './fotos/240/';        #Ordner für die kleinen Bilder (240px)
    $folder_500 './fotos/500/';        #Ordner für die mittleren Bilder (500px)

    #Dateinamen (id+ext+.jpg)
    $ext_o '_o';        #Dateiname für Originalbilder
    $ext_75 '_75';    #Dateiname für die Icons (75x75)
    $ext_100 '_100';    #Dateiname für die Thumbnails (100px)
    $ext_240 '_240';    #Dateiname für die kleinen Bilder (240px)
    $ext_500 '_500';    #Dateiname für die mittleren Bilder (500px)
    $use_flickr_id '0'#flickr-id anstatt Durchnummerierung benutzen? (0=nein, 1=ja)

    #Sonstiges
    $conf_per_page '10'#Wie viele Bilder pro Seite, 10 ist empfohlen
    $use_db '0'#Datenbank benuten? (0=nein, 1=ja)

    #Datenbankdaten
    $db_host 'localhost';    #Datenbank Server (meist localhost)
    $db_user 'maxmuster';    #Benutzer
    $db_pass 'passwort';    #Passwort
    $db_name 'datenbank';    #Datenbank
    $db_table 'tabelle';    #Tabelle

    ############_GET-Parameter untersuchen
    ######################################
    if($_GET['seite']) {
        
    $get_seite $_GET['seite'];
    } else {
        
    $get_seite 1;
    }

    ############Funktionen
    ######################
    function url_exists($url) {
        
    $AgetHeaders = @get_headers($url);
        if (
    preg_match("|200|"$AgetHeaders[0])) {
            return 
    TRUE;
        } else {
            return 
    FALSE;
        }
    }

    function 
    flickr_connect($params) {
        
    $encoded_params = array();
        foreach(
    $params as $k => $v) {
            
    $encoded_params[] = urlencode($k).'='.urlencode($v);
        }
        
    #API aufrufen und das empfangene dekodieren
        
    $url "http://api.flickr.com/services/rest/?".implode('&'$encoded_params);
        
    $rsp file_get_contents($url);
        
    $rsp_obj unserialize($rsp);
        return 
    $rsp_obj;
    }

    ############API Parameter
    #########################
    $getPublicPhotos_params = array(
        
    'api_key'    => $conf_api_key,
        
    'method'    => 'flickr.people.getPublicPhotos',
        
    'extras'    => 'date_taken,tags',
        
    'user_id'    => $conf_user_id,
        
    'per_page'    => $conf_per_page,
        
    'page'        => $get_seite,
        
    'format'    => 'php_serial'
    );

    $getInfo_params = array (
        
    'api_key'    => $conf_api_key,
        
    'method'    => 'flickr.people.getInfo',
        
    'user_id'    => $conf_user_id,
        
    'format'    => 'php_serial'
    );

    ############Seitenzahl berechnen
    ################################
    $getInfo flickr_connect($getInfo_params);
    $anzahl_bilder $getInfo['person']['photos']['count']['_content'];
    $anzahl_seiten ceil($anzahl_bilder $conf_per_page);
    $i 1;
    while(
    $i <= $anzahl_seiten) {
        if(
    $i != $get_seite) {
            
    $seitenzahlen .= "\t".'<a href="http://'.$_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"].'?seite='.$i.'">'.$i."</a>\n";
        } else {
            
    $seitenzahlen .= "\t".$i."\n";
        }
        
    $i++;
    }
    $seitenzahlen "<p>\n".$seitenzahlen.'</p>';

    ############Sonstiges
    #####################
    $realname $getInfo['person']['realname']['_content'];
    $username $getInfo['person']['username']['_content'];
    $flickr_profil $getInfo['person']['profileurl']['_content'];

    ############Verbindung zur Datenbank
    ####################################
    if($use_db) {
        
    $connection mysql_connect($db_host,$db_user,$db_pass) OR
            die(
    "Es konnte keine Verbindung zur Datenbank aufgenommen werden.\n\n");
        
        
    mysql_select_db($db_name);
    }

    ############Bilder herunterladen
    ################################
    $getPublicPhotos flickr_connect($getPublicPhotos_params);

    if(
    $getPublicPhotos['stat'] == 'ok') {
    echo <<<TABELLENKOPF
    <h2>Fotos von <a href="$flickr_profil">$realname ($username)</a></h2>

    $seitenzahlen

    <table border="1">
        <tr>
            <th>Bild</th>
            <th>ID</th>
            <th>Datum</th>
            <th>Titel</th>
            <th>Tags</th>
        </tr>
    TABELLENKOPF;

        
    $photos_r $getPublicPhotos['photos']['photo'];
        
    $id =  ($anzahl_bilder - (($get_seite-1) * $conf_per_page)) + 1;
        foreach(
    $photos_r as $image) {
            
    ############Variablen erzeugen
            
    $titel str_replace("'",'',$image['title']);
            
    $tags str_replace(' '','$image['tags']);
            
    $date $image['datetaken'];
            
    $id--;
            if(
    $use_flickr_id) {
                
    $s_id $image['id'];
            } else {
                
    $s_id $id;
            }
            
            
    ############URLs erzeugen + Bilder speichern
            
    $url_75 'http://farm'.$image['farm'].'.static.flickr.com/'.$image['server'].'/'.$image['id'].'_'.$image['secret'].'_s.jpg';
            if(
    $save_75) {
                
    copy($url_75$folder_75.$s_id.$ext_75.'.jpg');
            }
            if(
    $save_100) {
                
    $url_100 'http://farm'.$image['farm'].'.static.flickr.com/'.$image['server'].'/'.$image['id'].'_'.$image['secret'].'_t.jpg';
                
    copy($url_100$folder_100.$s_id.$ext_100.'.jpg');
            }
            if(
    $save_240) {
                
    $url_240 'http://farm'.$image['farm'].'.static.flickr.com/'.$image['server'].'/'.$image['id'].'_'.$image['secret'].'_m.jpg';
                
    copy($url_m$folder_240.$s_id.$ext_240.'.jpg');
            }
            if(
    $save_500) {
                
    $url_500 'http://farm'.$image['farm'].'.static.flickr.com/'.$image['server'].'/'.$image['id'].'_'.$image['secret'].'.jpg';
                
    copy($url_500$folder_500.$s_id.$ext_500.'.jpg');
            }
            
            
    ############Originabild-URL erzeugen + Bild speichern
            
    if($save_o) {
                
    $url_o 'http://farm'.$image['farm'].'.static.flickr.com/'.$image['server'].'/'.$image['id'].'_'.$image['secret'].'_o.jpg';
                if(!
    url_exists($url_o)) {
                    if(
    url_exists('http://flickr.com/photo_zoom.gne?id='.$image['id'].'&size=o')) {
                        
    $url_o2 'http://flickr.com/photo_zoom.gne?id='.$image['id'].'&size=o';
                    } else {
                        
    $url_o2 'http://flickr.com/photo_zoom.gne?id='.$image['id'].'&size=l';
                    }
                    
    $ausgabe file($url_o2);
                    foreach(
    $ausgabe as $key => $zeile) { 
                        if(
    preg_match("#<p><img src=\"http://farm(.*).static.flickr.com/(.*)/".$image['id']."_(.*)_(.*).jpg\" /><br /></p>#Uis"$zeile$treffer)) { 
                            
    $url_o 'http://farm'.$treffer[1].'.static.flickr.com/'.$treffer[2].'/'.$image['id'].'_'.$treffer[3].'_'.$treffer[4].'.jpg'
                        } 
                    }
                }
                
    copy($url_o$folder_o.$s_id.$ext_o.'.jpg');
            }
            
            
    ############MySQL speichern
            
    if($use_db) {
                
    $sql "INSERT INTO $db_table (
                            titel,
                            date,
                            tags
                        ) VALUES (
                            '$titel',
                            '$date',
                            '$tags'
                        )"
    ;
                
    mysql_db_query($db_name$sql);
            }
            
            
    ###### Tabelle ausgeben
    echo <<<TABELLE

        <tr>
            <td><img src="$url_75"></td>
            <td>$id</td>
            <td>$date</td>
            <td>$titel</td>
            <td>$tags</td>
        </tr>
    TABELLE;
        }
        echo(
    "\n</table>\n\n");
        echo(
    $seitenzahlen);
    } else {
        echo 
    "\nDas hat nicht funktioniert!";
    }
    ?>


    </body>
    </html>
    Angehängte Grafiken Angehängte Grafiken  

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

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 49 50 51