2014年5月18日日曜日

chcp 65001 UTF-8

chcp 65001 UTF-8


Sqlite Command Line UTF-8 文字を表示するために、
コマンドプロンプトのベージコードを設定します。

Chcp 65001


補足、ページコード;
437      IBM437        OEM United States
932      shift_jis         ANSI/OEM Japanese; Japanese (Shift-JIS)
1200     utf-16         Unicode UTF-16, little endian byte order (BMP of ISO 10646);
                             available only to managed applications
20127    us-ascii      US-ASCII (7-bit)
20932    EUC-JP      Japanese (JIS 0208-1990 and 0121-1990)
50220    iso-2022-jp  ISO 2022 Japanese with no halfwidth Katakana;
                             Japanese (JIS)
50222    iso-2022-jp   ISO 2022 Japanese JIS X 0201-1989;
                              Japanese (JIS-Allow 1 byte Kana - SO/SI)
51932    euc-jp         EUC Japanese
65001    utf-8          Unicode (UTF-8)

2014年5月17日土曜日

PHP Sqlite3 動作しない なぜ

PHP Sqlite3 動作しない


なぜ


Apache/2.2.25 (Win32) PHP/5.4.25

PHP 設定
  extension=php_pdo_sqlite.dll
  extension=php_sqlite3.dll





実行するとエラー出ます。

Fatal error: Call to undefined function sqlite_open() in C:\Apache\htdocs\Sqlite3\test.php on line 2


extension=php_pdo.dll

を有効にすると、Apache を起動する際、Warning PHP Startup メッセージが2回出ますが。
php_pdo.dll が存在しないようです。

PHPマニュアルを見ると
注意:
PHP 5.3 以降ではこのステップは不要です。PDO の DLL は必須ではなくなったからです。





相変わらず
実行するとエラー出ます。

Fatal error: Call to undefined function sqlite_open() in C:\Apache\htdocs\Sqlite3\test.php on line 2



次は

PHP 設定
  sqlite3.extension_dir = "C:\PHP\ext"



相変わらず
実行するとエラー出ます。

Fatal error: Call to undefined function sqlite_open() in C:\Apache\htdocs\Sqlite3\test.php on line 2



何かいい方法がありますか?












<?php
if ($db = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {
    sqlite_query($db, 'CREATE TABLE foo (bar varchar(10))');
    sqlite_query($db, "INSERT INTO foo VALUES ('fnord')");
    $result = sqlite_query($db, 'select bar from foo');
    var_dump(sqlite_fetch_array($result));
} else {
    die($sqliteerror);
}
?>





解決しました?
Class 方法でアクセス出来ました。
PHP は SQLite と SQLite3 両方のマニュアルが存在することですね。

http://jp2.php.net/manual/ja/book.sqlite3.php

<?php
$db 
= new SQLite3('mysqlitedb.db');
$results $db->query('SELECT bar FROM foo');
while (
$row $results->fetchArray()) {
    
var_dump($row);
}
?>






2014年4月29日火曜日

Youtube API 3.0 の応用

Youtube API 3.0 の応用

1. Youtube リスト作成、公開、List ID
2. 必要な曲を検索する、Video ID
3. Video ID を List ID に追加する。





https://www.youtube.com/user/icq7219388

Youtube API3.0 その2

Youtube API3.0 その2


<?php
error_reporting(E_ALL);
date_default_timezone_set('Asia/Tokyo');
session_start();


//OAuth 2.0 認証の実装
//https://developers.google.com/youtube/v3/guides/authentication?hl=ja#server-side-apps
//4/Qujeip_Txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx18wxj3igI
//http://localhost/oauth2callback#error=access_denied

//$req_url = 'http://'.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];

$x = new google_oauth;
$x->y3oauth();
$x->check();
//$x->step3();


class google_oauth {

//scope
// https://www.googleapis.com/auth/youtube Manage your YouTube account.
// https://www.googleapis.com/auth/youtube.readonly View your YouTube account.
// https://www.googleapis.com/auth/youtube.upload Upload YouTube videos and manage your YouTube videos.
// https://www.googleapis.com/auth/youtubepartner

public $step1_code = ''; //
public $client_id = 'xxxxxxxxx.apps.googleusercontent.com';
public $client_secret ='0Wxxxxxxxxxx9F';
public $redirect_uri = 'http://www.xxxxxxx.com/google/oauth.php';
public $scope = '';

public $access_token = '';
public $refresh_token = '';
public $token = array('access_token' => '',
 'token_type' => '',
 'expires_in' => '',
 'refresh_token' => '',
 'error' => '',
 'error_description' => '');

public function y3oauth(){


if(array_key_exists('you_access_token',$_COOKIE) and array_key_exists('you_refresh_token',$_COOKIE)){
//続き
$this->token['access_token'] = $_COOKIE['you_access_token'];
$this->token['refresh_token'] = $_COOKIE['you_refresh_token'];
$this->access_token = $this->token['access_token'];
}

if(!array_key_exists('you_access_token',$_COOKIE) and array_key_exists('you_refresh_token',$_COOKIE)){
//更新
$this->token['refresh_token'] = $_COOKIE['you_refresh_token'];
$this->step2();
setcookie('you_access_token',$this->token['access_token'],time()+$this->token['expires_in'],"/",'xxxxxxx.com');
$this->access_token = $this->token['access_token'];
}

if(!array_key_exists('you_access_token',$_COOKIE) and !array_key_exists('you_refresh_token',$_COOKIE)){
//新規
$this->scope = "https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/youtubepartner";
$this->step1();
$this->step11();



$this->access_token = $this->token['access_token'];
}

if(array_key_exists('you_access_token',$_COOKIE) and !array_key_exists('you_refresh_token',$_COOKIE)){
//例外、you_access_tokenあり、you_refresh_tokenなし
$this->step3();
$this->access_token = $this->token['access_token'];
exit();
}
}


public function step1(){

//step1 アクセス トークンを取得する
$para['client_id'] = $this->client_id;
$para['redirect_uri'] = $this->redirect_uri;
$para['response_type'] = 'code';
$para['scope'] = $this->scope;
$para['approval_prompt'] = 'auto';
$para['access_type'] = 'offline';
$para['state'] = '';
$para['login_hint'] = '';
$oauth_rul ='https://accounts.google.com/o/oauth2/auth';
$step1_url = $oauth_rul.'?'.http_build_query($para);

if(!array_key_exists('code',$_GET)){
$tempurl ='location: '. $step1_url;
header($tempurl);
}else{
$this->step1_code = $_GET['code'];
}


}



public function step11(){

//step2 更新トークンとアクセス トークンの承認コードを交換する
$para['code'] = $this->step1_code;
$para['client_id'] = $this->client_id;
$para['client_secret'] = $this->client_secret;
$para['redirect_uri'] = $this->redirect_uri;
$para['grant_type'] = 'authorization_code';
$token_url ='https://accounts.google.com/o/oauth2/token';
$temp = http_build_query($para);

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,true);
curl_setopt($ch, CURLOPT_URL, $token_url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $temp);
$code = curl_exec($ch);
$curlgetinfo=curl_getinfo($ch,CURLINFO_HEADER_OUT);
//$curlgetinfo=curl_getinfo($ch);
curl_close($ch);
foreach(json_decode($code) as $key => $val){
$this->token[$key] = $val;
}

setcookie('you_access_token',$this->token['access_token'],time()+$this->token['expires_in'],"/",'xxxxxxx.com');
setcookie('you_refresh_token',$this->token['refresh_token'], time()+60*60*24*30,"/",'xxxxxxx.com');

}


public function step2(){

//アクセス トークンの更新
$para['client_id'] = $this->client_id;
$para['client_secret'] = $this->client_secret;
$para['refresh_token'] = $this->token['refresh_token'];
$para['grant_type'] = 'refresh_token';
$token_url ='https://accounts.google.com/o/oauth2/token';
$temp = http_build_query($para);

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,true);
curl_setopt($ch, CURLOPT_URL, $token_url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $temp);
$code = curl_exec($ch);
$curlgetinfo=curl_getinfo($ch,CURLINFO_HEADER_OUT);
//$curlgetinfo=curl_getinfo($ch);
curl_close($ch);
foreach (json_decode($code) as $key => $val){
$this->token[$key] = $val;
}

//更新でもトークンが取得できなければ、アクセス トークンを取得する
if ($this->token['access_token'] == ''){
$this->step1();
$this->step11();
}
}


public function step3(){
//取り消す
$this->token['access_token'] = $_COOKIE['you_access_token'];
$cl_url = 'https://accounts.google.com/o/oauth2/revoke?token='.$this->token['access_token'] ;

setcookie('you_access_token',$this->token['access_token'],time()-3600,"/",'xxxxxxx.com');
setcookie('you_refresh_token',$this->token['refresh_token'], time()-3600,"/",'xxxxxxx.com');

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,true);
curl_setopt($ch, CURLOPT_URL, $cl_url);
$code = curl_exec($ch);
$curlgetinfo=curl_getinfo($ch,CURLINFO_HEADER_OUT);
//$curlgetinfo=curl_getinfo($ch);
curl_close($ch);
exit();

}

public function check(){
if($this->access_token != ''){
header('location: '.$_SESSION['req_url']);
}
}

public function ac_token(){
return $this->access_token;
}
}





YouTube Data API 3.0 その1

Function Youtube API3.0



<?php
error_reporting(0);
date_default_timezone_set('Asia/Tokyo');
//session_start();
$_SESSION['req_url'] = 'http://'.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];

if(array_key_exists('you_access_token',$_COOKIE)){
$token = $_COOKIE['you_access_token'];
}else{
$_SESSION['req_url'] = 'http://'.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
header('location: http://www.xxxxxxx.com/google/oauth.php');
}

?>
<?php
//YouTube Data API 3.0
//Searchメソッド
set_time_limit(0);
$xx = new dataapi;
$xx->token_check(); //
//$xx->c_play_list('本語 対応しますか'); //再生リストの作成、公開 名前の入力が必須 return list id;
//$xx->c_play_item_insert(Lid,Vid); //
//$xx->search('Part Of Me - Katy Perry'); //サーチ return Video ID array[0[;





class dataapi{

public function dataapi(){



}

public function token_check(){

if(array_key_exists('you_access_token',$_COOKIE)){
$token = $_COOKIE['you_access_token'];
}else{
$_SESSION['req_url'] = 'http://'.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
header('location: http://www.xxxxxxx.com/google/oauth.php');
}
}


public function search($q){
//API リクエストで指定したクエリ パラメータに一致する検索結果のコレクションを返します。
$request_url = 'https://www.googleapis.com/youtube/v3/search';
$mode = 'GET';
$para['part'] = 'id'; //必須パラメータ
$para['q'] = $q;
$para['type'] = 'video';

$curl_url = $request_url.'?'.http_build_query($para);

$temp = $this->curl($mode,$curl_url);

return $temp['items']['0']['id']['videoId'];

//echo '<pre>';
//echo 'search';
//print_r($temp);
}


public function c_play_list($name){
//playlist リソースは YouTube の再生リストを表します。
//再生リストを作成します   Playlists: insert

$request_url ='https://www.googleapis.com/youtube/v3/playlists';
$mode = 'POST';
$para['part'] = 'snippet,status';
$paras['snippet'] = array('title' => $name);
$paras['status'] = array ('privacyStatus' => 'public');

$curl_url = $request_url.'?'.http_build_query($para);

$temp = $this->curl($mode,$curl_url,$paras);

//echo '<br>';
// print_r($temp);


return $temp['id'];
}






public function c_play_item_insert($Lid,$Vid){
//playlist リソースは YouTube の再生リストを表します。
//作成したリストにアイテムを追加

$request_url ='https://www.googleapis.com/youtube/v3/playlistItems';
$mode = 'POST';
$para['part'] = 'snippet';
$paras['snippet'] = array('playlistId' => $Lid,
 'resourceId' => array('videoId' => $Vid,
'kind' => 'youtube#video'));

$curl_url = $request_url.'?'.http_build_query($para);
$temp = $this->curl($mode,$curl_url,$paras);
//echo '<pre>';
//print_r($temp);

}




public function curl($mode,$url,$paras=null){
//cURL 送信
$Authorization_header = 'Authorization: Bearer  '.$_COOKIE['you_access_token'];
if ($mode == 'GET'){
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,true);

curl_setopt($ch, CURLOPT_HEADER, false);
//curl_setopt($ch, CURLINFO_HEADER_OUT, true);

curl_setopt($ch, CURLOPT_HTTPHEADER, array($Authorization_header));
curl_setopt($ch, CURLOPT_URL, $url);
$code = curl_exec($ch);
//$curlgetinfo=curl_getinfo($ch,CURLINFO_HEADER_OUT);
//$curlgetinfo=curl_getinfo($ch);
//echo '<pre>';
//var_dump($curlgetinfo);

curl_close($ch);
}

if ($mode == 'POST'){
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,true);

curl_setopt($ch, CURLOPT_HEADER, false);
//curl_setopt($ch, CURLINFO_HEADER_OUT, true);

//curl_setopt($ch, CURLOPT_HTTPHEADER, array($Authorization_header,'Content-Length:','Expect:','Content-Tpye: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: ','Content-Type:  application/json',$Authorization_header, 'X-JavaScript-User-Agent:  Google APIs Explorer'));
//echo '<pre>';

$data_string = json_encode($paras);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_URL, $url);
$code = curl_exec($ch);
$curlgetinfo=curl_getinfo($ch,CURLINFO_HEADER_OUT);
//$curlgetinfo=curl_getinfo($ch);
//echo '<pre>';
//var_dump($curlgetinfo);
curl_close($ch);
}


return json_decode($code,true);






}


}

2014年4月10日木曜日

Google 検索パラメーター

Google Search Operators

Google 検索パラメーター


site
inurl
intext
intitle

    intitle:index.of "parent directory"
    intitle:index.of inurl:admin
    intitle:index.of "server at"
    "Microsoft-IIS/* server at" intitle:index.of
    "Apache/""server at" intitle:index.of
    "OmniHTTPd/2.10" intitle:index.of
    "OpenSA/1.0.4" intitle:index.of
    "Oracle HTTP Server Powered by Apache" intitle:index.of

filetype
    filetype:mbx mbx intext:Subject
    filetype:pst pst ( contacts | address | inbox )
    registry - filetype:reg reg +intext:"internet account manager"
    filetype:eml eml +intext:"Subject" +intext:"From"
    filetype:reg "Terminal Server Client"



author:@microsoft.com
link:www.sensepost.com
inurl:tech-support inurl:show Cisco
intitle:"switch home page""cisco systems" Telnet -to"
"Looking Glass" (inurl:"lg/" | inurl:lookingglass)
intitle:Welcome to ntop!"
intitle:"statistics of" " advanced web statistics"
inurl:"smb.conf" intext:workgroup" filetype:conf
filetype:vsd vsd network -samples -examples
"VNC Desktop" inurl:5800
allinurl:"exchange/logon.asp"












2014年4月7日月曜日

Google クローラ Agent

Google クローラ Agent


Googlebot(Google ウェブ検索)   Googlebot
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Googlebot/2.1 (+http://www.google.com/bot.html)



ニュース用 Googlebot  Googlebot-News
Googlebot-News



画像用 Googlebot  Googlebot-Image
Googlebot-Image/1.0



動画用 Googlebot  Googlebot-Video
Googlebot-Video/1.0



Google モバイル Googlebot-Mobile
「各種携帯端末」(compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)



Google モバイル AdSense
Mediapartners-Google
「各種携帯端末」(compatible; Mediapartners-Google/2.1; +http://www.google.com/bot.html)



Google AdSense
Mediapartners-Google



Google AdsBot を使ったリンク先ページの品質確認
AdsBot-Google
AdsBot-Google (+http://www.google.com/adsbot.html)




robots.txt

robots.txt ファイルの中で、いくつものユーザーエージェントが見つかった場合は、最も限定的なものに従って Google のクロールが行われます。サイトのページをすべてクロールさせたい場合は、robots.txt ファイルを作成する必要はありません。一部のコンテンツに対して Google のクローラによるアクセスをブロックまたは許可する場合は、Googlebot をユーザーエージェントとして指定します。たとえば、サイトのページがどれも Google 検索結果に表示されるようにしたい場合や、AdSense の広告をサイトのページ上に表示したい場合は、robots.txt ファイルは必要ありません。同様に、一部のページに対して Google からのアクセスを一切ブロックしたい場合は、ユーザーエージェント Googlebot をブロックすると、Google の他のユーザーエージェントもすべてブロックされます。

さらに細かくコントロールしたい場合は、より限定的に指定します。たとえば、サイトのページが Google の検索結果に表示されるようにしたいけれども、/personal ディレクトリにある画像はクロールの対象外にしたい場合は、robots.txt を使用して、ユーザーエージェント Googlebot-image による /personal ディレクトリ内のファイルのクロールを禁止する(ただし、Googlebot にはすべてのファイルのクロールを許可する)ように指定します。次に例を示します:

User-agent: Googlebot
Disallow:

User-agent: Googlebot-Image
Disallow: /personal
別の例として、サイトのすべてのページに広告を表示したいけれども、ページを Google 検索結果には表示したくない場合は、次のように、Googlebot をブロックし、Mediapartners-Google によるアクセスは許可します:
User-agent: Googlebot
Disallow: /

User-agent: Mediapartners-Google
Disallow:
robots メタ タグ

ページによっては、次のように、複数の robots metaタグを使用してクローラごとにディレクティブが指定されていることもあります。

<meta name="robots" content="nofollow"><meta name="googlebot" content="noindex">
このような場合は、Google はすべての不許可ディレクティブに従います。つまり、Googlebot は noindex と nofollow の両方のディレクティブに従います。Google によるサイトのクロールとインデックス登録をコントロールする方法のさらに詳しい説明については、こちらをご覧ください。

https://support.google.com/webmasters/answer/1061943?hl=ja