2014年7月20日日曜日

XML名前空間 Javascript

XML名前空間 Javascript


document.documentElement.namespaceURI

element.getElementsByTagNameNS

与えられた名前空間に属し、与えられたタグの名前を持つ要素のリストを返します。


例:
document.getElementsByTagNameNS("http://itunes.apple.com/rss","image")


a=date.getElementsByTagName('entry')[0]
a.getElementsByTagNameNS('http://itunes.apple.com/rss','image');

2014年7月19日土曜日

javascript オブジェクト 作成、プロパティ、メゾット

javascript オブジェクト 作成、プロパティ、メゾット


<script text="text/javascript">

var j = function (e){
        var x=0;
        var opt = {};

        opt.a =function (){
                x=x+1;
                return x;
  }();

        opt.b = function(){
                x=x-1;
                return x;
        };

        opt.c = function(){
                return "opt.c";
        };

        opt.d = function(){
                return "opt.b";
  }();

        opt.e = function(x){
                console.log(x);
                console.log(e);
                return x;
        };

        opt.f = function(x){
                return x;
        }(e);

        return opt;
}("引数");

</script>


実行の結果:



2014年7月10日木曜日

Adsense 広告の表示時間を指定

Adsense 広告の表示時間を指定するためのJavascript です。


前略




<br />
<div id="get">
</div>
<script type="text/javascript">
setTimeout("adse()",5000);

function adse(){
        var get = document.getElementById("get");
        var newel = document.createElement("script");
            newel.async = true;
            newel.src = '//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
        var inst = document.createElement("ins");
            inst.className="adsbygoogle";
            inst.style.cssText = "display:inline-block;width:300px;height:600px";
            inst.setAttribute("data-ad-client", "ca-pub-0000000000000000");
            inst.setAttribute("data-ad-slot", "0000000000");
  newel.appendChild(inst);
  get.appendChild(newel);
}

</script>



2014年6月1日日曜日

SQLite3 ODBC Driver;

SQLite3 ODBC Driver



Private Sub Form_Open(Cancel As Integer)

Dim db As New ADODB.Connection
Dim ss As New ADODB.Recordset

db.Open "DRIVER=SQLite3 ODBC Driver;Database=C:\AccVB\vid.db"
db.CursorLocation = adUseClient



db.Execute "create table tete (id integer primary key ,iid text)"
db.Execute "insert into tete(iid) values (1111111)"
db.Execute "insert into tete(iid) values ('abcde')"
db.Execute "update tete set iid = 'tetetete' where id = 1"

Set ss = db.Execute("select * from tete")
Set Me.lt.Recordset = ss.Clone

db.Close
Set db = Nothing

End Sub


http://www.ch-werner.de/sqliteodbc/

2014年5月18日日曜日

SQLite Command

SQLite Command

忘れたコマンド


Index の作成
sqlite> create index jjj on xx(t1,t2);
sqlite> create unique index uindex on xx (t1,t2);

index の削除
sqlite> drop index uindex;

index の確認
sqlite> .s xx
CREATE TABLE xx (t1,t2,t3,t4, xx);
CREATE INDEX jjj on xx(t1,t2);

sqlite> .d xx
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE xx (t1,t2,t3,t4, xx);
INSERT INTO "xx" VALUES('a','b','c','d',NULL);
INSERT INTO "xx" VALUES('a1','b1','c1','d1',NULL);
INSERT INTO "xx" VALUES('a21','b21','c21','d21',NULL);
INSERT INTO "xx" VALUES('a321','b421','c421','d421',NULL);
INSERT INTO "xx" VALUES('t','t','t','t','t');
CREATE INDEX jjj on xx(t1,t2);
COMMIT;
sqlite>



挿入
sqlite> insert into ff values ('dd');


PRIMARY KEY
sqlite> create table ff (id integer primary key ,name text);






試しに作成したSQLite Databases.

sqlite> .d
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE vid (id integer primarykey ,vid text);
CREATE UNIQUE INDEX vidkey on vid(vid);
COMMIT;
sqlite>


































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

2014年3月21日金曜日

Google 検索エンジン最適化スターターガイド

Google 検索エンジン最適化スターターガイド

  1. https://support.google.com/webmasters/answer/35291?hl=ja&ref_topic=3309300
  2. https://static.googleusercontent.com/media/www.google.co.jp/ja/jp/webmasters/docs/search-engine-optimization-starter-guide-ja.pdf



Search Engine Optimization Starter Guide - Google

  1. http://static.googleusercontent.com/media/www.google.com/ja//webmasters/docs/search-engine-optimization-starter-guide.pdf



谷歌搜索引擎优化初学者指南 - Google

  1. http://static.googleusercontent.com/media/www.google.cn/ja/cn/intl/zh-CN/webmasters/docs/search-engine-optimization-starter-guide-zh-cn.pdf
  2. https://support.google.com/webmasters/answer/35291?hl=zh-Hant&ref_topic=3309300




Google 搜尋引擎最佳化初學者指南

  1. http://static.googleusercontent.com/media/www.google.com/ja//intl/zh-TW/webmasters/docs/search-engine-optimization-starter-guide-zh-tw.pdf








Twitter ボタン Google+ ボタン

Twitter ボタン


ウェブサイトにボタンを追加してウェブサイトの訪問者がコンテンツを共有したり、あなたとTwitterでつながったりできるようにしましょう。

https://about.twitter.com/ja/resources/buttons#tweet

<a href="https://twitter.com/share" class="twitter-share-button" data-text="ツイッター本文" data-lang="ja" data-count="none" data-dnt="true">ツイート</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>




Google+ ボタン


ページに共有ボタンを含めるには、必要な JavaScript を含め、共有タグを追加する方法が最も簡単です。この基本的な実装には、幅を変更できる標準の 20 px 共有ボタンが含まれます。

https://developers.google.com/+/web/share/?hl=ja

<script src="https://apis.google.com/js/plusone.js"></script>
<g:plus action="share"></g:plus>


Google+ 共有リンク


共有リンクは、ネイティブ クライアント アプリケーション、Flash アプリケーション、プライバシーが重要なサイト、+1 ボタンまたは共有ボタンを使用できないその他のユーザー向けに作られています。次のマークアップをサイトに追加すると、訪問者に共有ダイアログをポップアップ表示するシンプルなアイコンが追加されます。

<a href="https://plus.google.com/share?url={URL}" onclick="javascript:window.open(this.href,
  '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600');return false;"><img
  src="https://www.gstatic.com/images/icons/gplus-64.png" alt="Share on Google+"/></a>










覚えられない AdSense 用語

ページの CTR

ページのクリック率


ページのクリック率(CTR)は、広告のクリック数をページ ビュー数で割った値です。

Page CTR = Clicks / Page views

たとえば、250 ページ ビューのうち 2 回のクリックが発生した場合、広告ユニットのクリック率は 0.8% となります(2/250 = 0.8%)。



クリック単価(CPC)

クリック単価(CPC)は、ユーザーの 1 回の広告クリックから得られる収益額です。広告のクリック単価は広告主が決定し、宣伝内容に応じて競合広告より高いクリック単価が支払われる場合もあります。


ページの RPM

インプレッション収益(RPM)

ページのインプレッション収益


インプレッション収益(RPM)は、表示回数 1,000 回あたりの見積もり収益額を表します。インプレッション収益は実際の収益額ではありません。見積もり収益額をページビュー数、表示回数、またはクエリ数で割り、1,000 を掛けた値です。

計算方法:
インプレッション収益 =(見積もり収益額/ページビュー数)×1000

次に例を示します。

ページ ビュー数 25 回での見積もり収益額が 0.15 ドルの場合、ページのインプレッション収益は(0.15 ドル/25)×1,000 = 6 ドルとなります。
広告の表示回数 45,000 回での見積もり収益額が 180 ドルになる場合、広告のインプレッション収益は(180 ドル/45,000)×1,000 = 4 ドルとなります。
インプレッション収益は広告プログラムでよく使用される数値で、チャネルごとの収益を比較する際に役立ちます。

-----

ページのインプレッション収益(RPM)は、見積もり収益額をページ ビュー数で割り、1,000 を掛けた値です。

Page RPM = (Estimated earnings / Number of page views) * 1000

たとえば、ページ ビュー数 25 回での見積もり収益額が 0.15 ドルの場合、ページのインプレッション収益は(0.15 ドル/25)×1,000 = 6 ドルとなります。



カバレッジ


カバレッジとは、広告が 1 回以上表示された広告リクエストの割合です。一般的にカバレッジは、AdSense で関連性の高い広告が掲載されないサイトを特定するのに役立ちます。

計算方法:
カバレッジ =(広告が表示された広告リクエスト数/広告リクエストの合計)×100

たとえば、3 つの広告ユニットを掲載しているページがある場合、広告リクエストは 3 になります。これらの広告ユニットのうち 2 つで広告が表示され、1 つで表示されなかった場合、このページのカバレッジは 66.67% になります。同様に、検索ボックスがある場合、カバレッジが 80 % ということは、平均でクエリ 5 回に 1 回だけ検索結果に広告が表示されないことを意味します。

リンク ユニットの場合、カバレッジには、ユーザーがリンク ユニットの語句をクリックした後に広告が表示されたリンク ユニットの数が反映されます。リンク ユニットを表示するページのカバレッジは、ユーザーのクリックが必要となるため、他の種類の広告ユニットよりかなり低くなります。また、一致しない広告リクエスト数は多くなります。

100% に近い高いカバレッジは、ほとんどのリクエストに対して Google が広告を表示できたことを示します。カバレッジが低い場合は、Google がページに適した広告を表示できず、広告が表示されなかったか代替広告が表示されたことを意味します。カバレッジを最大限に高めるには、カバレッジが低い原因を確認されることをおすすめします。




https://support.google.com/adsense/answer/92360?hl=ja
https://support.google.com/adsense/topic/19363

2014年3月16日日曜日

HTML Head

HTML Head



<?php
// ページ先頭のパラメータ
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
echo '<html xmlns="http://www.w3.org/1999/xhtml">';
echo '<head>';
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
echo '<title>hpapi</title>';
echo '<link rel="stylesheet" type="text/css" href="link.css" media="screen,all" />';
//echo '<link rel="shortcut icon" href="favicon.ico">';
echo '<link rel="icon" type="image/gif" href="./pic/favicon.gif">';
echo '<meta name="keywords" content="hpapi" />';
echo '<meta name="description" content="hpapi" />';
echo '<link rel="alternate" type="application/atom+xml" title="Atom" href="" />';
echo '<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="" />';
echo '</head>';
echo '<body>';

?>



<?php
//ページの終了
echo '</body>';
echo '</html>';
?>


自己流、ロゴ記録

自己流、ロゴ記録


<?php
function mf_log($log){
error_reporting(0);
date_default_timezone_set('Asia/Tokyo');
$file=basename(__FILE__);
$log_server[$file]=date('c');
$log_server['ip']=$_SERVER['REMOTE_ADDR'];
$log_server['uag']=$_SERVER['HTTP_USER_AGENT'];
$log_server['lg']=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
$log_server['url']=$log;

$log_str='<?php //';
foreach ($log_server as $key=>$val){
$log_str=$log_str.$key.'>'.$val.', ';
unset($val);
unset($key);
}
$log_str=$log_str.'// ?>'."\r\n";
file_put_contents('log.php', $log_str, FILE_APPEND | LOCK_EX);
}
?>

userAgent の仕分け

userAgent の仕分け


<?php
switch($_SERVER['HTTP_USER_AGENT']){
case null:
$url='null';
break;

case 'Twitterbot/1.0':
$url='twitter';
break;

case 'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)':
$url='facebook';
break;

default:
$url='default';
}

//header("location:{$url}");
echo '<br>';
echo $url;

?>

スマートフォンサイトCSSのmeta要素

スマートフォンサイトCSSのmeta要素



<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0" />
<body style="width:70%">









PHPファイルの直接アクセス拒否する

PHPファイルの直接アクセス拒否する



if (basename(__FILE__)==basename($_SERVER["REQUEST_URI"])){
       header("location:{$url}");
exit('Error: Cannot modify header information !!!');
}

2014年3月15日土曜日

SimpleXMLでCDATAの取り扱い

SimpleXMLでCDATAの取り扱い

simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);

simplexml_load_file($xml, 'SimpleXMLElement', LIBXML_NOCDATA);

$xmlo=simplexml_load_file($this->xmlurl,$class_name = "SimpleXMLElement",LIBXML_NOCDATA);

SimpleXMLElement simplexml_load_file ( string $filename [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]] )


options
   PHP 5.1.0 と Libxml 2.6.0 から、追加の Libxml パラメータ を指定するために options を使用することもできます。


LIBXML_NOCDATA (integer)
   CDATA をテキストノードとしてマージ



2014年3月12日水曜日

iPhone からのアクセスが圧倒的に多き

iPhone からのアクセスが圧倒的に多き


Android のアクセスは目立たないぐらい、20%ぐらい弱



ログファイル




2014年3月9日日曜日

robots.txtの記録

robots.txtの記録

robots.txtの書き方

SEO設定

robots.txt ファイルが必要となるのは、サイトに検索エンジンのインデックスに登録したくないコンテンツが含まれる場合のみです。サイトのすべてのコンテンツを検索エンジンのインデックスに登録したい場合は、robots.txt ファイルは(空のものでも)必要ありません。


User-agent:
Disallow:
Allow:
 一行空ける
Sitemap: http://hpapi.blogspot.com/feeds/posts/default?orderby=UPDATED


User-agent:例
User-agent:               //クローラー
User-agent: *              //全てのクローラー
User-agent: Mediapartners-Google  //指定クローラー
User-agent: Googlebot-Image
User-agent: Googlebot


User-agent:例
Disallow                                       //ブロック
Disallow: /                //サイト全体をブロック
Disallow: /directory/                     //指定ディレクトリ
Disallow: /file.html                         //指定ページ
Disallow: /*?                                //すべての URL へのアクセス
Disallow: /*.txt$                           // すべての *.txt


Allow: 例
Allow:                   //クローラー許可
Allow:/directory/files.html              //


基本的に下記でOKですが
User-agent: *
Disallow:


検索エンジンにクローラーされたくない時に
Disallow: /affiliate/

を追加します。



大手サイトの例
http://www.google.co.jp/robots.txt
http://jp.msn.com/robots.txt
https://www.facebook.com/robots.txt
https://twitter.com/robots.txt
http://www.rakuten.co.jp/robots.txt
    User-Agent: *
   Disallow: /images/
   Disallow: /backup/
   Disallow: /cgi-bin/
   Disallow: /shops/         Shopsがロックされています。




参考
https://support.google.com/webmasters/answer/156449?hl=ja









追記:
サイト管理者やページ作者がクロールを防ぐ (制御する) 手段として ロボット除け規約 が定着しています. その設定方法には以下の2通りの方法があります.


  • robots.txt ファイル

  • あなたがサイト管理者で, 必要な権限を持っているなら, クローラへの指示を記述した /robots.txt というファイルをサイトのトップに 置いて下さい (http://www.your-site.com/robots.txt など). 例えば, 以下の記述は Steeler があなたのサイトからダウンロードするのを 全面的に 禁止します.

        User-agent: Steeler
        Disallow: /
  • Disallow にはパス名の先頭部分 (プレフィックス) の他, ワイルドカード "*" や パス末尾を表す "$" を使うことができます. 例えば, 以下の記述は /images ディレクトリ以下のコンテンツとともに, 拡張子 .gif を持つコンテンツをアクセス禁止にします.

        User-agent: Steeler
        Disallow: /images/
        Disallow: *.gif$
  • アクセスの頻度が問題になる場合, Crawl-delay を指定して下さい. 例えば, 以下の記述はサイトへのアクセスの間隔を 少なくとも 30 秒空けるよう指示します.

        User-agent: Steeler
        Crawl-delay: 30.0

  • Robots メタタグ

  • あなたが HTML (テンプレート) のソースを編集できるなら, robots メタタグ を利用することもできます. HTML 文書のヘッダに

        <META NAME="robots" CONTENT="noindex,nofollow">
  • という行を記述すると, Steeler はその文書からのリンクを たどらなくなります.





2014年3月8日土曜日

Windows FTP  記憶しておきたいコマンド

Windows FTP  記憶しておきたいコマンド


FTPコマンド

-i   複数ファイルの転送の際に対話型プロンプトを表示しないようにします。 

注:追加してFTPコマンドを起動すると複数ファイルの操作時に対話が表示されなくなります。
  例え複数ファイルを削除する際にファイルの確認メッセージが表示されなくなります。
  例: delete *.txt

-s:FileName
   ftp コマンドが含まれているテキスト ファイルを指定します。これらのコマンドは、
   ftp を起動すると自動的に実行されます。このパラメータにスペースを含めること
   はできません。リダイレクト (<) の代わりに、このパラメータを使ってください。

   例: ファイル
             ftpcmd.txt
             open
             server.net
             user
             passwd
      verbose
             cd abc
             dir
             close
             quit

      実行方法
      ftp -i -s:ftpcmd.txt


FTPサプコマンド

verbose   既定では、verbose は有効になっています。verbose モードが有効になっている
       と、ftp のすべての応答が表示されます。ファイル転送が完了すると、転送効率
       に関する統計情報も表示されます。 



よく使われるコマンド

ftp -i -s:file.txt






FTPコマンド詳細一部

構文
  ftp [-v] [-d] [-i] [-n] [-g] [-s:FileName] [-a] [-w:WindowSize] [-A] [Host]

パラメータ
  -v  FTP サーバーの応答を表示しないようにします。 
  -d  FTP クライアントと FTP サーバー間で渡されたすべてのコマンドを表示して、
      デバッグできるようにします。 
  -i   複数ファイルの転送の際に対話型プロンプトを表示しないようにします。 
  -n   初期接続を行ったときに、自動的にログオンする機能を無効にします。 
  -g   ファイル名の globbing を無効にします。glob は、ローカル ファイル名
      およびパス名で、アスタリスク (*) と疑問符 (?) をワイルドカード文字として
      使えるようにします。詳細については、「Ftp : glob」を参照してください。 
  -s:FileName 
      ftp コマンドが含まれているテキスト ファイルを指定します。これらのコマンド
      は、ftp を起動すると自動的に実行されます。このパラメータにスペースを
      含めることはできません。リダイレクト (<) の代わりに、このパラメータを
      使ってください。 
  -a   FTP データ接続をバインドするときに、任意のローカル インターフェイスを
      使用できることを指定します。 
  -w:WindowSize 
      転送バッファのサイズを指定します。既定のウィンドウ サイズは 4096 バイトです。 
  -A   FTP サーバーに匿名ユーザーとしてログオンします。 
  Host 
      接続する FTP サーバーのコンピュータ名、IP アドレス、または IPv6 アドレスを
      指定します。ホスト名またはアドレスを指定する場合は、行の最後のパラメータ
      として指定する必要があります。 












2014年3月2日日曜日

訳の分からないuserAgent(ユーザーエージェント)

訳の分からないuserAgent(ユーザーエージェント)


ロポットとユーザーを区別して対応するための Function 。


<?php
mf_rot();

function mf_rot(){
//echo '<br>';
//echo $_SERVER['HTTP_USER_AGENT'];
//echo '<br>';
//echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
//echo '<br><br><br><br><br><br>';

$ulg=array();
$robots=array(' ',
'Java/1.7.0_25',
'Twitterbot/1.0',
'ceron.jp/1.0',
'NING/1.0',
'Apache-HttpClient/4.3 (java 1.5)',
'Google-HTTP-Java-Client/1.17.0-rc (gzip)',
'MetaURI API/2.0 +metauri.com',
'Yahoo:LinkExpander:Slingstone',
'EventMachine HttpClient',
'ShortLinkTranslate',
'msnbot/1.1 (+http://search.msn.com/msnbot.htm)',
'QuerySeekerSpider ( http://queryseeker.com/bot.html )',
'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)',
'Y!J-BRW/1.0 crawler (http://help.yahoo.co.jp/help/jp/search/indexing/indexing-15.html)',
'HTTP_Request2/2.2.1 (http://pear.php.net/package/http_request2) PHP/5.5.9',
'Mozilla/5.0 ()',
'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; SLCC1; .NET CLR 1.1.4322)',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8) AppleWebKit/536.25 (KHTML, like Gecko) Version/6.0 Safari/536.25',
'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0)',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1',
'Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)', //***
'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)', //***
);

if(!empty($_SERVER['HTTP_USER_AGENT']) and !empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
if (!in_array($_SERVER['HTTP_USER_AGENT'],$robots)){
$ulg=explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);

if($ulg['0']=='ja' or $ulg['0']=='ja-jp'){
echo '<br>ja-jP<br>';
echo '<br>is user<br>';
echo '<br>is japanese<br>';
}else{
echo '<br>is not japanese<br>';
echo '<br>exit1<br>';
}
}else{
echo '<br>is Robot<br>';
echo '<br>exit2<br>';
}
}else{
echo '<br>Empty<br>';
}
}
?>

2014年2月23日日曜日

システム連携を加速させる、ショッピングAPI のご紹介

システム連携を加速させる、ショッピングAPI のご紹介


2014/3/13(Thu) 17:00 - 21:30(door16:30)

Yahoo!ショッピングによる、「エンジニア」のためのイベントです。
当社では、2013年10月7日ストアカンファレンスにて「e コマース革命」を宣言いたしました。
同席上にて、テクニカルディレクターより今後すべてのAPIを公開しオープン化を促進していく事も発表させていただいておりますが、この度約50本のAPIをリリースいたします。
本イベントでは、Yahoo!ショッピングのオープン化の戦略、公開するAPIの詳細説明、ec業界のキープレイヤーによるトークセッションなど、各種コンテンツをご用意しております。
エンジニアの皆様の参加を心よりお待ちしています!

感想:
    行きたい

2014年2月22日土曜日

$value foreach 内部で解除すべきか、外部解除すべきか?

警告
foreach ループを終えた後でも、 $value は配列の最後の要素を参照したままとなります。 unset() でその参照を解除しておくようにしましょう。

と書いてありますが、foreach 内部で解除すべきか、外部解除すべきか?





<?php
$v=array('A'=>'aaa',
'B'=>'bbb',
'C'=>'ccc'
);

foreach ($v as $key=>$val){
echo $key;
echo '=>';
echo $val;
echo '<br>';
unset($key);
unset($val);

}

unset($key);
unset($val);

echo 'end foreach<br>';
echo $key;
echo '=>';
echo $val;
echo '<br>';

?>