php代碼獲取豆瓣網上電影信息的簡介

suxiang. 8年前發布 | 4K 次閱讀 PHP C# .NET JavaScript

[PHP]代碼

<?php
//搜索鏈接
function search_link($moviename)
{

        //構造url,其中max-results可根據需要更改
        $urlString = 'http://api.douban.com/movie/subjects?q='.$moviename.'&start-index=1&max-results=1&alt=json';
        //print_r($urlString);
        $urlString=mb_convert_encoding($urlString, "UTF-8", "GBK");//將Url轉換為utf-8編碼
        $r = new HttpRequest($urlString,HttpRequest::METH_GET);//請求
        $response = $r->send();
        $result = $r->getResponseBody();
        $obj = json_decode($result);//解析成json格式

        if($entry = @$obj->{'entry'}){
                //搜索鏈接并存在數組中返回
                for($i = 0;$i<sizeof($entry);$i++){
                        $link=$entry[$i]->{'link'}; 
                        for($j = 0;$j<sizeof($link);$j++){
                              $arr = (array)$link[$j];
                              $key = array_search("self",$arr);
                              if($key){                                 //判斷key是否存在
                                  $str = $arr["@href"].'?alt=json'; //構造返回鏈接的格式
                                  break;
                              } 
                        }
                        $link_array[] = $str;
                }
                return $link_array;//返回鏈接
        } else
                echo"Not Found!";

}

//查詢鏈接并將各變量放入$GLOBAL 數組
function get_info($urlString)
{
        $r = new HttpRequest($urlString,HttpRequest::METH_GET);
        $response = $r->send();
        $result = $r->getResponseBody();

        //if..else.. 判斷打開鏈接是否為空
        if ($obj = json_decode($result)){
            //將影片的信息放在全局數組中
            $title = $obj->{'title'};
            $author = $obj->{'author'};
            $summary = $obj->{'summary'};
            $ID=$obj->{'id'};
            $link = $obj->{'link'};  
            $gd = (array)$obj->{'gd:rating'};   
            $db_array = array();

            $db = $obj->{'db:attribute'};
            //將db:atribute中的值放進數組
            foreach ($db as $value){
                $value_array = (array)($value);
                $v = $value_array["@name"];
                $k = $value_array["\$t"];
                if (array_key_exists("@lang",$value_array)){
                    $lang=$value_array["@lang"];
                    $k=$k.'['.$lang.']';
                }       
                $db_array[$v][]=$k; 
            }
            //設定對應數組的鍵值
            @$db_array_key = array('【影片原名】','【別    名】','【導    演】','【編    劇】','【官方網站】','【IMDB鏈接】','【出品年代】',
                               '【國    家】','【電影類型】','【上映日期】','【放映長度】','【集    數】','【語    言】','【演    員】');
            @$db_array_value = array($db_array["title"],$db_array["aka"],$db_array["director"],$db_array["writer"],$db_array["website"],
                                 $db_array["imdb"],$db_array["year"],$db_array["country"],$db_array["movie_type"],$db_array["pubdate"],
                                 $db_array["movie_duration"],$db_array["episodes"],$db_array["language"],$db_array["cast"]);
            @$db_array = array_combine($db_array_key,$db_array_value);
        }   else{
                echo "Empty link!";
        }
        $info=array("title"=>$title,"author"=>$author,"summary"=>$summary,"ID"=>$ID,"link"=>$link,"gd"=>$gd,"db_array"=>$db_array);
        return $info;
}
//將影片信息寫入文件     
function write_info($fi,$info)          
{  
            //fwrite($fi, "******");寫入文件
            fwrite($fi, "【影片原名】");
            foreach ($info["title"] as $k=>$v)
                    fwrite($fi,"$v\r\n");
            fwrite($fi,"\r\n");     

            fwrite($fi,"【出 品 人】");
              foreach ($info["author"] as $value)
                  foreach ($value as $key)
                    foreach ($key as $v) {
                      fwrite($fi,"$v\r\n");
                    }
            fwrite($fi,"\r\n");         

            //db:attribute
            foreach ($info["db_array"] as $key=>$value){
                if(count($value)){
                        fwrite($fi,$key);
                        if($value==$info["db_array"]['【演    員】']){
                            foreach($value as $k=>$v)
                                fwrite($fi,"$v\r\n            ");
                        }   else{
                                foreach($value as $k=>$v)
                                    fwrite($fi,"$v  ");
                                fwrite($fi,"\r\n");
                        }
                }
            }
            fwrite($fi,"\r\n"); 

            //影片簡介
            fwrite($fi, "【簡    介】\r\n");
            foreach ($info["summary"] as $k=>$v){
                fwrite($fi,"   $v \r\n");
            } 
            fwrite($fi,"\r\n");             

            //ID  
            fwrite($fi,"【I      D】");
            foreach ($info["ID"] as $k=>$v){
                fwrite($fi,$v);
            }
            fwrite($fi,"\r\n"); 

            //鏈接              
            fwrite($fi,"【鏈    接】\r\n"); 
            foreach ($info["link"] as $value){   
                foreach ($value as $k=>$v){ 
                    fwrite($fi, "  $v  ");
                }
                fwrite($fi,"\r\n");
            }
            fwrite($fi,"\r\n"); 

            //評論  
            fwrite($fi,'【評    論】'); 
            fwrite($fi,$info["gd"]["@numRaters"]);
            fwrite($fi,"\r\n"); 
            fwrite($fi,'【最高】');  fwrite($fi,$info["gd"]["@max"]);
            fwrite($fi,"  【最低】");fwrite($fi,$info["gd"]["@min"]);
            fwrite($fi,'  【平均】');fwrite($fi, $info["gd"]["@average"]);
            fwrite($fi,"\r\n"); 
}
//在指定的文件夾中尋找電影并返回電影名
function find_dir($dir)
{
    if(is_dir($dir)){                           //判斷所給路徑名是否為目錄
        if($fdir=opendir($dir)){                //打開目錄
            while(false!==($file=readdir($fdir))){              //遍歷目錄中的文件
                if ($file != "." && $file != "..") 
                    $files[]=$file;                 //將尋找到的文件放入數組并返回
            }
            closedir($fdir);
            print_r($file);
            return $files;
        }   
    }
}
//將生成的txt文件放在指定的目錄下
function write_to_dir($dir,$moviename)
{    
    if (is_dir($dir)){                                                      //判斷所給路徑名是否為目錄
        if($fdir=opendir($dir)){                                            //打開目錄
            while(false!==($file=readdir($fdir))){                          //遍歷目錄中的文件  
                if ($file != '.' && $file != '..') {  
                    $dirname=$dir.'\\'.$file;
                    if (is_dir($dirname)&&$file==$moviename) {                  //尋找指定的文件夾
                        $filename=$dirname.'\\'.$moviename.'.txt'; 
                        //if(!file_exists($filename)){                      
                            if($fi=fopen($filename,'w+')){                       //打開指定文件,若不存在,建立文件并返回
                                closedir($fdir);
                                return $fi;   
                            }else
                                echo"Fail to Open file!";   
                        //}                             
                    } else
                            echo "Dir Not Exists!";             
                }   
            }  
        } else {
                        echo 'Fail to Open!';   
                        return;
        }
    }   else {
                echo 'Directory Not Exists!';
                return;
    }
}

$dir = 'E:\film';
if($movienames = @find_dir($dir)){                              //在指定目錄中獲得電影名,進行搜索
    foreach ($movienames as $key=>$moviename){
        if($link_info = search_link($moviename)){

            //搜索影片名
            if ($fi=write_to_dir($dir,$moviename)){                 //寫入指定文件夾
                fwrite($fi,"<Resources>\r\n");
                fwrite($fi,'<MesageBody>');
                fwrite($fi,"\r\n\r\n\r\n".'※※※※※※※※※※※※※※※※※※※※※ 影片信息 ※※※※※※※※※※※※※※※※※※※※※'."\r\n");

                foreach ($link_info as $k){
                    $info=get_info($k);                             //獲取鏈接信息
                    write_info($fi,$info);                          //在txt文件中寫入信息
                    fwrite($fi,"*************************************************************************************************\r\n");
                }
                fclose($fi);//寫入完成,關閉文件
            }
        } else
            echo "Empty!";
    }
}   else 
        echo "Movies Not Exists!";
?>
 本文由用戶 suxiang. 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!