source: spip-zone/_plugins_/flickr_hasard/trunk/modeles/flickr_fonctions.php @ 106922

Last change on this file since 106922 was 106922, checked in by erational@…, 3 years ago

A priori compatible SPIP 3.2

File size: 6.9 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7
8//
9// doc API Flickr:
10// https://www.flickr.com/services/api/
11
12
13define ("_KEY_API_FLICKR_RAND", "867b665fba7129ffe540684714ab50e0");
14
15
16#
17#  function fetch_data_flickr
18#  call the API and decode the response
19function fetch_data_flickr($params,$debug=false) {
20        $encoded_params = array();
21        foreach ($params as $k => $v){
22                $encoded_params[] = urlencode($k).'='.urlencode($v);
23        }
24        $url = "https://api.flickr.com/services/rest/?".implode('&', $encoded_params);
25        $rsp = file_get_contents($url);
26        $rsp_obj = unserialize($rsp);
27        if ($debug) var_dump($rsp_obj);
28
29        if ($rsp_obj['stat'] == 'ok') return $rsp_obj;
30                                                        else return false;
31
32}
33
34
35
36//
37//  Main
38//
39
40function flickr_rand($str,$tags='',$license=5,$align='',$size='Small',$safesearch=1,$id=0,$text='',$texte='',$iteration=0) {
41        $api_key =  _KEY_API_FLICKR_RAND;
42
43        // etape -1: recuper config sur present
44        if (function_exists(lire_config))  {         
45                $plage = (int) lire_config('flickr_rand/plage'); 
46                if ($plage>4000) $plage = 4000; 
47                if ($plage<0)    $plage = 1;
48
49                $blacklist =   explode(";",lire_config('flickr_rand/blacklist', ""));
50        } else {
51                $plage = 100;
52                $blacklist = array();
53        }
54
55        // etape 0: traiter des parametres et ajouter les valeurs par defaut (le php ne les prends pas via fonction a cause du modele)
56        $tags = strip_tags($tags);
57        $text = strip_tags($text);
58        $texte = strip_tags($texte);
59        if ($texte!="")
60                                $text = $texte; 
61
62        $license = strip_tags($license);
63        if ($license == 0 )             
64                                $license = 9;               // valeur par defaut
65        if ($license == -1 )             
66                                $license = 0;               // copyright
67        if ($license == 8 )             
68                                $license = "1,2,3,4,5,6";   // alias
69        if ($license == 9 )             
70                                $license = "1,2,3,4,5,6,7"; // alias                         
71
72        $align = strip_tags($align);
73        if ($align=="") $align = "non_aligne"; 
74
75        $size = ucfirst(strip_tags($size));
76        if ($size=="") $size = "Small";           // valeur par defaut
77
78        $safesearch =  (int) $safesearch;
79        if ($safesearch == 0 ) 
80                                $safesearch = 1;           // valeur par defaut
81
82        // etape 1: recuperer une image donnee
83        if ($id>0) {
84                $id_photo_rand  =  $id;
85        }  else { 
86                // etape 1bis: ou recuperer une image au hasard selon nos criteres               
87                $page_rnd = rand(1, $plage); 
88
89                $params = array(
90                        'api_key'       => $api_key,
91                        'method'        => 'flickr.photos.search',
92                        'tags'  => $tags,
93                        'text' => $text,
94                        'license' => $license,   
95                        'safe_search' => $safesearch, 
96                        'format'        => 'php_serial',
97                        'per_page' => '1',         
98                        'page' => $page_rnd        // page (=photo) au hasard selon la taille du pool
99                );
100
101                $rsp_obj =  fetch_data_flickr($params); 
102
103                if ($rsp_obj) {
104                        $photos = $rsp_obj['photos']['photo'];
105                        if (!$photos) {
106                                // pas de resultat, la plage est sans doute trop grand pour la requete
107                                // on refait une tentative en ignorant la parametre de plage
108                                $params['page'] = 1;
109                                $params['per_page'] = 100;
110                                $rsp_obj =  fetch_data_flickr($params); 
111                        if ($rsp_obj) {
112                                $photos = $rsp_obj['photos']['photo'];
113                                if (!$photos)
114                                        return false;    // vraiment pas de resultats
115                        } else {
116                                        return false; 
117                        }
118                        } 
119                $id_photo_rand = $photos[array_rand($rsp_obj['photos']['photo'], 1)]['id'];   // on prend une image au hasard           
120                } 
121        }
122
123
124        // etape 2: chercher l'image et l'afficher
125        $params = array(
126                        'api_key'       => $api_key,
127                        'method'        => 'flickr.photos.getInfo',
128                        'photo_id'      => $id_photo_rand,
129                        'format'        => 'php_serial',
130        );
131
132        $rsp_obj =  fetch_data_flickr($params);
133
134        if ($rsp_obj){
135                        $_photo_rand_title = @$rsp_obj['photo']['title']['_content'];
136                        $_photo_rand_owner = @$rsp_obj['photo']['owner']['username'];
137                        $_photo_rand_licence = @$rsp_obj['photo']['license']; 
138                        $_photo_rand_url_page = @$rsp_obj['photo']['urls']['url'][0]['_content'];   
139
140                        // si l'auteur est ds liste noire
141                        // on refait une recherche
142                        if (in_array($_photo_rand_owner, $blacklist) && strlen($_photo_rand_owner)>0) {
143                                if ($iteration<10) {
144                                        return flickr_rand($str,$tags,$license,$align,$size,$safesearch,$id,$text,$texte,++$iteration);
145                                } else {
146                                        return "<!-- flickr_rand: no match -->";
147                                }
148                        }       
149
150                        // doc licence: http://www.flickr.com/services/api/flickr.photos.licenses.getInfo.html           
151                        switch ($_photo_rand_licence)  {
152                                case 4:   $license_name = "Creative Commons BY";          $licence_url = "http://creativecommons.org/licenses/by/2.0/";   break;
153                                case 6:   $license_name = "Creative Commons BY-ND";       $licence_url = "http://creativecommons.org/licenses/by-nd/2.0/";   break;
154                                case 3:   $license_name = "Creative Commons BY-NC-ND";    $licence_url = "http://creativecommons.org/licenses/by-nc-nd/2.0/";   break;
155                                case 2:   $license_name = "Creative Commons BY-NC";       $licence_url = "http://creativecommons.org/licenses/by-nc/2.0/";   break;
156                                case 1:   $license_name = "Creative Commons BY-NC-SA";    $licence_url = "http://creativecommons.org/licenses/by-nc-sa/2.0/";   break;
157                                case 5:   $license_name = "Creative Commons BY-SA";       $licence_url = "http://creativecommons.org/licenses/by-sa/2.0/";   break;
158                                case 7:   $license_name = "No known copyright restrictions";    $licence_url = "http://flickr.com/commons/usage/";   break;
159                                case 0:   $license_name = "Copyright";                    $licence_url = "http://www.flickr.com/help/general/#147";   break;
160                                default:  $license_name = "Unknown License";              $licence_url = "http://www.flickr.com/help/general/#147";   break;                         
161                        }
162
163                        //echo "Title is $_photo_rand_title - $_photo_rand_owner - :::: $_photo_rand_licence :::  !";
164
165                        // etape 3: recuperer la taille requise la plus proche
166                        $params = array(
167                                'api_key'       => $api_key,
168                                'method'        => 'flickr.photos.getSizes',
169                                'photo_id'      => $id_photo_rand,
170                                'format'        => 'php_serial',
171                        );
172                        $rsp_obj =  fetch_data_flickr($params);
173                        if ($rsp_obj){
174                                foreach($rsp_obj['sizes']['size'] as $rsp_size) { 
175                                        $_photo_rand_url =    $rsp_size['source'];
176                                        $_photo_rand_width =  $rsp_size['width'];             
177                                        if ($rsp_size['label']==$size)
178                                                break;
179                                }
180
181                                        if ($_photo_rand_url) {
182                                                $output = "<dl class='flick_rand flickr_".strtolower($size)." spip_documents_$align' style='width:".$_photo_rand_width."px'>\n
183                                                                        <dt><a href='$_photo_rand_url_page'><img src='$_photo_rand_url' alt='flickr' /></a></dt>\n";
184                                        if ($_photo_rand_title)
185                                                $output .=  "<dt class='spip_doc_titre'><strong>$_photo_rand_title</strong><dt>\n";
186                                                $output .= "<dt class='spip_doc_descriptif'>par $_photo_rand_owner<dt>\n
187                                                                        <dt class='spip_doc_licence'><a href='$licence_url' rel='license'>$license_name</a><dt>\n
188                                                </dl>";
189                                        return $output;                   
190                                        }                           
191                        }
192        }
193}
Note: See TracBrowser for help on using the repository browser.