Web site construction UP-I

  • 遺跡データベース

  • 旅を楽しむエッセンス

仕事

WEB制作小ネタ
  • CSVでタイトル管理
    タイトルの設定を各ページにするとなると結構面倒です。
    そこで、各ページに対するデータをCSVとして設定します。
    データベースで設定するのもよいですが、入力画面や削除画面が必要になりますので、CSVのアップロダーで処理したほうが簡単でしょうということです。
    タイトルだけでなくディスクリプションやキーワードも一括で管理できますのでSEOなどに結構役立つ仕組みとなっています。
    ※ページ毎でタイトルやh1タグの内容やディスクリプションやキーワードをお好みにあわせて変更が可能です。

    【コード】

    //ファイルを開くファンクション------------------------- //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対策として有効。

  • GoogleMapAPI
    日本語入力の住所をジオコードに変換してGoogleMapを表示

    ベタ記述でもOKですが、ファンクションとして読み込むほうが便利ですので、適当にg_mapとか名前を付けたfunctionを作成してインクルードします。
    ※APIは仕様が結構変わりますので、functionファイルのみ修正して調整するのがベターだと考えます。


    住所を取得 (フォームで渡してあげればOKです)
    下記ではname="address"としています。

    【コード】

    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; }

    アクセスページに設定しています

    ※戻ってきた$objデータのどこにジオコードがあるかわかるととても簡単ですね。
    実際、ファンクションにまとめたコードはたったの13行程度です。
  • YouTubeAPI
    Youtubeの動画を自サイトに表示
    YoutubeのAPIにパラメーターを渡します。
    YOUTUBE API = "http://gdata.youtube.com/feeds/api/videos?q=".パラメーター."&orderby=published&max-results=".件数."&v=2&alt=json&lr=ja"; $obj=$feedURLをjson型配列で代入

    【コード】

    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検索サイトが自サイト内に持てます。
    また、表示したい動画を特定の検索パラメータで設定もできます。

  • カレンダーfunction
    スケジュール等のカレンダーを生成するファンクションです。
    日付をIDに持ったレコードのデータテーブルからデータを取得して、カレンダーデータと日付で参照して配列に取り込みます

    【コード】

    
    							

    デモ