URL取得クラスを書き換えました
自分なりのオブジェクト指向ってやつで。
部品が増えてくると叩くメソッドの順番が分からなくなりますね。
現在はURL取得だけに特化って事で。
プロから見たらまだまだだなって思われるんだろうな(汗
以下ソース
<?php Class nico_login{ private $mail = null; //メールアドレスを格納 private $pass = null; //パスワードを格納 private $video_id = null; //動画IDを格納 private $user_session = null; //本家から得たユーザーセッションを格納 private $db_user_session = null; //DBから得たユーザーセッションを格納 private $meta_data = null; //メタデータを格納 private $context_response = null; //コンテキストのレスポンスを格納 private $mov_url = null; //動画URLを格納 function __construct($video_id){ //コンストラクタ $this->mail = "メールアドレス"; $this->pass = "パスワード"; $this->video_id = $video_id; } function set_meta_data(){ //メタデータをメンバ変数へセットするメンバ関数 ココでユーザーセッション取得 $url = "https://secure.nicovideo.jp/secure/login?site=niconico"; $data = array("next_url" => '',"mail" => $this->mail,"password" => $this->pass,"submit" => "",); //POSTの設定 $data = http_build_query($data); $option = array('http' => array('method' => 'POST','content' => $data)); $context = stream_context_create($option); //contextの作成 $fp = @fopen($url, 'rb', false, $context); //streamを開く $response = @stream_get_meta_data($fp); //streamからmetaデータの取得 $this->meta_data = $response; } function set_user_session(){ //本家から得たユーザーセッションをメンバ変数へセットするメンバ関数 preg_match('(user_session=[a-z0-9_]+)',$this->meta_data["wrapper_data"][8],$u_ses_str); $this->user_session=$u_ses_str[0]; } function set_db_user_session(){ //DBから得たユーザーセッションをメンバ変数へセットするメンバ関数 $sql = "select 項目 from テーブル名"; $result = mysql_query($sql); $rows = mysql_num_rows($result); $data = mysql_fetch_object($result); $this->db_user_session = $data->ユーザーセッション項目名; } function set_context_response(){ //コンテキストをメンバ変数へセットするメンバ関数 $context = stream_context_create(array('http'=>array('method'=>'POST','header'=>"Content-type: text/xml\r\nCookie:".$this->db_user_session.";"))); $res = split("&",urldecode(file_get_contents('http://www.nicovideo.jp/api/getflv?v='.$this->video_id,false,$context))); $this->context_response = $res; } function set_mov_url(){ //動画URLをメンバ変数へセットするメンバ関数 $mov_url = ereg_replace('url=(.*)','\1',$this->context_response[2]); $this->mov_url = $mov_url; } function get_meta_data(){ //メタデータを取り出すメンバ関数 return $this->meta_data; } function get_user_session(){ //本家から得たユーザーセッションを取り出すメンバ関数 return $this->user_session; } function get_db_user_session(){ //DBから得たユーザーセッションを取り出すメンバ関数 return $this->db_user_session; } function get_context_response(){ //コンテキストのレスポンスを取り出すメンバ関数 return $this->context_response; } function get_mov_url(){ //動画URLを取り出すメンバ関数 return $this->mov_url; } function insert_user_session(){ //DBへユーザーセッションをinsert処理するメンバ関数 $day = Date('Y-m-d'); $ins_sql = "insert into テーブル名(最終更新日の項目,ユーザーセッションの項目)values('$day','".$this->get_user_session()."')"; mysql_query($ins_sql); } function update_user_session(){ //無効になったDBのユーザーセッションを更新するメンバ関数 $day = Date('Y-m-d'); $up_sql = "update テーブル名 set 最終更新日の項目 = '$day',ユーザーセッションの項目 ='".$this->get_user_session()."'"; mysql_query($up_sql); } function check_user_session(){ //ユーザーセッションのチェックをするメンバ関数 if(empty($this->db_user_session)){ //insert時の処理 $this->set_meta_data(); $this->set_user_session(); $this->insert_user_session(); }elseif($this->context_response[0]=="closed=1"){ //update時の処理 $this->set_meta_data(); $this->set_user_session(); $this->update_user_session(); }else{ //通常時の処理 $this->set_db_user_session(); } } function get_video_url(){ //URL取得メソッド $this->set_db_user_session(); $this->set_context_response(); $this->check_user_session(); $this->set_db_user_session(); $this->set_context_response(); $this->set_mov_url(); return $this->get_mov_url(); } } $obj = new nico_login($num); print $login->get_video_url(); //URLを表示 ?>
前回からの改善点
- 毎回ログインをやめた。
- DBのユーザーセッションが有効な時は本家に再ログインせず使いまわす。
- 使用中のユーザーセッションが無効になっても自動更新。
- 不測の事態でレコードが0になっても自動補填。