【コード】
//ファイルを開くファンクション-------------------------
//PC用 Shift-JISをUTF-8に変換
function csv_load($filename){
$filename=$filename;
$list=array();
$data_f = fopen($filename, 'r');
flock($data_f, LOCK_EX); //ファイルをロック
while (! feof($data_f)){//
$data = fgets($data_f); //
//文字エンコード------------------------
$data=mb_convert_encoding($data,'UTF-8','sjis-win');
if ($data == FALSE || $data == '') break; //エラー処理
$data = trim($data); //
$data = explode(",", $data);//
$list[]=$data;
}
flock($data_f, LOCK_UN); //ロックを解除します
fclose($data_f);
return $list;
}//
//携帯用 Shift-JISをそのまま設定
function csv_load_mobile($filename){
$filename=$filename;
$list=array();
$data_f = fopen($filename, 'r');
flock($data_f, LOCK_EX); //ファイルをロック
while (! feof($data_f)){//
$data = fgets($data_f); //
//文字エンコード無し------------------------
if ($data == FALSE || $data == '') break; //エラー処理
$data = trim($data); //
$data = explode(",", $data);//
$list[]=$data;
}
flock($data_f, LOCK_UN); //ロックを解除します
fclose($data_f);
return $list;
}
//ヘッダーでの記述------------------------------------
//csvデータ
ディレクトリ,アクション,タイトル,キーワード,ディスクリプション,H1
worksCSV例
works,index,仕事一覧,web/仕事/一覧/○○/○○/○○,○○のお仕事一覧/・/・/・,仕事一覧
works,order,仕事受注,web/仕事/受注/○○/○○/○○,○○のお仕事受注/・/・/・,仕事受注
・・・
※各ディレクトリに対して、サブディレクトリ(アクション)がある場合。
//CSVからデータを読み込む
$title_list=csv_load('title.csv');
$title_chk=array(
'index'
,'about'
,'flow'
,'company'
,'works'
,'contact'
,'recruit'
,'sitemap'
);
//タイトルデータに代とるデータがあるかチェック
$title_flag=in_array(ディレクトリ,$title_chk);
foreach ($title_list as $key =>$fldata){
if($title_flag==false){
$error='error';
}
if($fldata[0]==ディレクトリ && $fldata[1]==サブディレクトリ){
$title =$fldata[2];//タイトル
//キーワードは/で区切っているので,に置換する
$k_word =str_ireplace('/',',',$fldata[3]);//キーワード
$description=$fldata[4];//ディスクリプション
$hi =$fldata[5];//H1タグ用
}
}
$title
CSVを工夫することでページやh1タグに関連性を持たせる事ができます。
SEO対策として有効。
ベタ記述でもOKですが、ファンクションとして読み込むほうが便利ですので、適当にg_mapとか名前を付けたfunctionを作成してインクルードします。
※APIは仕様が結構変わりますので、functionファイルのみ修正して調整するのがベターだと考えます。
【コード】
function g_map($adress){
$obj=array();
//デフォルトで住所を入れとくことでページにアクセスしたときのエラー回避
$address='大阪府大阪市中央区○○○';
//ZIOコード取得のAPIへ接続
$url="http://maps.googleapis.com/maps/api/geocode/ json?address=".$address."&sensor=false&language=ja";
$json = file_get_contents($url,true);
//json_decodeの戻り値を先に連想配列にするために引数にtrueを渡します
//連想配列にしておくことでPHPで配列にする手間が省けます
$obj = json_decode($json,true);
$list=array('lat_data'=>$lat,'lng_data'=>$lng);
//※json_decodeがnullの時に渡すエラー処理を記述しておくとよいでしょう。
//ジオデータ取り出し
$lat=$obj['results'][0]['geometry']['location']['lat'];
$lng=$obj['results'][0]['geometry']['location']['lng'];
str_replace("float(", ")", $lat);
str_replace("float(", ")", $lng);
//$latと$lngの値を配列に入れて、リターンします
return $list;
}
【コード】
function youtube_keyword($num,$parm1){
// generate feed URL(YouTubeAPIより取得
/*
//取得設定-***********************************************************************
◆標準フィード
//これは使えないようだorderbyで対応
評価の高い動画: top_rated URL: http://gdata.youtube.com/feeds/api/standardfeeds/top_rated
お気に入り登録の多い動画: top_favorites URL: http://gdata.youtube.com/feeds/api/standardfeeds/top_favorites
再生回数の多い動画: most_viewed URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed
人気の動画: most_popular URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_popular
新着動画: most_recent URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_recent
話題の動画: most_discussed URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_discussed
コメントの多い動画: most_responded URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_responded
おすすめ: recently_featured URL: http://gdata.youtube.com/feeds/api/standardfeeds/recently_featured
◆orderby データの並び替えができます。(例)公開日で並び変える→ orderby=published
relevance(関連性)
published(公開日)
viewCount(再生回数)
rating(評価)
◆lr タイトル、説明文の言語から判断した国を指定できます。
(例)日本の動画から検索する→ lr=ja
ISOの ISO 639-1 Code から国の言語を指定します。
//パラメーター設定-------------------------------------
◆alt alt パラメータは、返されるフィードのフォーマットを指定します(json)
ユーザー アクティビティ フィードのリクエストでは、author パラメータには、最大 20 件の Yo◆uTube ユーザー名をカンマで区切ったリストを含めます。
この API レスポンスには、それらのユーザーのいずれかが行ったアクティビティが含まれます。
callback alt パラメータの値が json-in-script に設定されている場合にのみ使用し、API レスポンスを送るコールバック関数を指定します
◆max-results max-results 結果セットに含める最大の件数を指定します。
たとえば 10 件ずつの 2 番目のセット(11~20 番目の結果)を要求するには、max-results パラメータを10に設定し、start-indexパラメータを 11 に設定します。
このパラメータのデフォルト値は 25、最大値は 50 です。
ただし、動画のリストを表示する場合は max-results パラメータを10に設定することをおすすめします。
◆start-index start-index パラメータは、一致した結果のうち結果セットに最初に含める結果のインデックスを指定します。
このパラメータでは、1 をベースとしたインデックスを使用します。
つまり最初の結果が 1 で、2 番目の結果が 2 となります。このパラメータは、返す結果を指定する max-results パラメータと連携します。
たとえば 10 件ずつの 2 番目のセット(11~20 番目の結果)を要求するには、start-index パラメータを 11 に設定し、max-results パラメータを 10 に設定します。
◆strict(strict=true) API リクエストに無効なリクエスト パラメータが含まれていた場合に、そのリクエストを拒否することを YouTube に指示できます。
http://gdata.youtube.com/feeds/api/videos?foo=nonono&strict=true
◆v その API リクエストの処理に YouTube が使用する API のバージョンを指定します。
◆q キーワード
たとえば「skateboarding dog」に関するすべての動画の検索のうち、21 件目から 10 件の結果をリクエストする URL は次のとおりです:
http://gdata.youtube.com/feeds/api/videos?
q=skateboarding+dog
&start-index=21
&max-results=10
&v=2
q=football+-soccer→footballに一致し、soccerに一致いない
リクエストにブール型演算子の NOT(-)と OR(|)を使って、動画を除外したり、複数の検索キーワードのいずれかに関連する動画を検索したりすることもできます。
たとえば、「boating」または「sailing」に一致する動画を検索するには、q パラメータを「boating%7Csailing」に設定します
(このパイプ(|)文字には URL エスケープが必要です)。
同様に、「boating」か「sailing」のいずれかに一致し、「fishing」には一致しない動画を検索するにはq パラメータを「boating&7Csailing+-fishing」に設定します。
■PHPスクリプトでfile_get_contents関数を使うことも少なくありませんが、この関数では、指定したURLが存在しない場合はWarning(警告)が表示されます。
検索したユーザーが存在しないのでWarning(警告)が表示されます。
Warningを非表示にするだけであれば、file_get_contentsの前に「@」を付加するだけです。
//***********************************************************************
*/
if($num==''){//件数エラー処理
$num=10;
}
$list=array();
$feedURL = "http://gdata.youtube.com/feeds/api/ videos?q=".$parm1."&orderby=published&max-results=".$num."&v=2&alt=json&lr=ja";
//jsonデータを取得
$json_flag = @file_get_contents($feedURL);
if ($json_flag == false) {
$obj=array();
}else{
//json_decodeの戻り値を先に連想配列にするために引数にtrueを渡します
$json = file_get_contents($feedURL,true);
$obj = json_decode($json,true);
}
if($json_flag != false){
//データ取得
if(isset($obj['feed']['entry'])){
foreach($obj['feed']['entry'] as $key=>$val){
$list[$key]['title']=$val['title'];
$list[$key]['link']=$val['link'][0]['href'];
$list[$key]['name']=$val['author'][0]['name']['$t'];
$list[$key]['comment']=$val['media$group']['media$description']['$t'];
$list[$key]['image']=$val['media$group']['media$thumbnail'][1]['url'];
$list[$key]['sub_title']=$val['media$group']['media$title']['$t'];
$list[$key]['id']=$val['media$group']['yt$videoid']['$t'];
//キーワードによってはエラーとなる
if(isset($val['yt$statistics']['viewCount'])){
$list[$key]['view_count']=$val['yt$statistics']['viewCount'];
}else{
$list[$key]['view_count']=0;
}
}
}
}
return $list;
}
※API仕様変更により動かない状況です。(調査中)
デモ
表示ページで検索と件数の設定フォームを作ってあげると即席のYouTube検索サイトが自サイト内に持てます。
また、表示したい動画を特定の検索パラメータで設定もできます。
【コード】