PHPに惚れました

今でも多分惚れてます。

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になっても自動補填。