logo logo_banner

WEB の最近のブログ記事


自分のブログをシェアしたり、されたときにあまり表示されて欲しくない画像がサムネイルで表示されたりすることがありますが、その画像を意図的に指定する方法があるようです。

OGP (Open Graph Protocol)といわれるものを、<head>~</head>に追加することでできるようで、以下の一行を加えるだけでできます。

<meta property="og:image" content="http://指定したい画像のパス" /> 

今回、指定した画像はこれ↓

 

でも、上記だけでは内部的に情報不足で、Facebookにおいては下記6つが必須なようです。

  • og:title
  • og:type
  • og:image
  • og:url
  • og:site_name
  • fb:admins or fb:app_id
<meta property="og:title" content="その記事のタイトル" />
<meta property="og:type" content="blog" />
<meta property="og:image" content="http://指定したい画像のパス" />
<meta property="og:url" content="http://シェアするURL" />
<meta property="og:site_name" content="サイト名" />
<meta property="fb:admins" content="1234567890"/>

最後のfb:adminsの設定でfacebookのユーザID

 

以下のサイトでは、シェアした際にFacebookが取得する情報をあらかじめ確認をすることや、足らない情報などを表示することができます。

 

OGP (Open Graph Protocol)については以下のサイトが参考になります。

トラックバック(0)

トラックバックURL:


".htaccess" に記述することにより、外部から要求されたリクエスト URL を書き換えてリダイレクトします。
ファイルの移転、ディレクトリ再編成、サイト移転、更にはアクセス拒否まで絶大な効果を発揮します。

具体的には、外部から要求されたリクエスト URL を Apache の "mod_rewrite" 拡張モジュール(URL書き換えエンジン)を使用し、 正規表現を使って書き換えます。 "Redirect" と異なり、リクエストの URL が実在しなくても転送が可能です。

【注意:サーバーの環境】
Apache1.2 以降で使用可能。 Apache の "httpd.conf" で、 "mod_rewrite" モジュールが利用可能になっている必要があります。 Apache httpd.conf の詳細設定 LoadModule

説明

ディレクティブ

ディレクティブと書式 初期値 説明
RewriteEngine on/off off 書き換えの可否を設定。
RewriteOptions inherit - inherit : 現在の設定値を親ディレクトリの設定値から強制的に継承する。
RewriteBase / / 書き換えのベースとなるパス(ベースが明白な場合は不要)。
RewriteCond テスト文字列 条件 パターン。 - 条件によるテスト文字列とパターンの比較。
RewriteRule パターン 置換対象。 - パターンを置換対象で置き換える。

オプション

[R] 強制的にリダイレクト (Redirect) する。
[R=301] : 永久的に移動。HTTP レスポンスの「301 : Moved Permanently」を返します。
[R=302] : 一時的な移動。HTTP レスポンスの「302 : Moved Temporarily」を返します、デフォルト。
[F] 強制的にアクセス禁止 (Forbidden) にする。
HTTP レスポンスの「403 : Forbidden」を返します。
[G] 強制的に消去済み (Gone) にする。
HTTP レスポンスの「410 : Gone」を返します。 もはや存在しないページを消去済みとしてマークします。
[L] 書き換えが行われたら終了 (Last) にする。
現在の書き換え後の URL が後続のルール によってそれ以上書き換えられることを防止します。
[NC] パターンについて、文字の大小を区別しない(No Case)。 つまり、"A-Z" と "a-z" は区別されません。
[OR] または。

正規表現

文字 説明
! 否定。
. 任意の1文字。
[ ] 括弧内のいずれかの文字。
[^ ] 括弧内のいずれかの文字以外。
| または。
? 直前の文字の0回または1回の繰り返し
* 直前の文字の0回以上の繰り返し。
+ 直前の文字の1回以上の繰り返し。
( ) 選択範囲の境界を明示する、もしくは後方参照を作成する。
^ 行頭。
$ 行末。
$n (0 <= n <= 9) 後方参照。 n番目の( )内の値が入ります。
%{ } サーバ変数の取得。
\ (日本語環境では円マーク)正規表現の特殊文字をエスケープする。

サーバ変数

変数名 説明
HTTP_USER_AGENT ブラウザの種類とバージョン。
HTTP_REFERER 参照元の URL 。
HTTP_COOKIE 設定されているクッキー情報。
HTTP_FORWARDED プロキシサーバ情報。
HTTP_HOST 接続要求しているホスト名。
HTTP_PROXY_CONNECTION 接続先プロキシサーバとの接続状態。
HTTP_ACCEPT ブラウザが認識可能なデータ形式。
DOCUMENT_ROOT サイトのルートディレクトリ。
SERVER_ADMIN サーバ管理者のメールアドレス情報。
SERVER_NAME サーバのホスト名、ドメイン名、またはIPアドレス情報。
SERVER_ADDR サーバのIPアドレス。
SERVER_PORT 送信に使われたサーバのポート番号。
SERVER_PROTOCOL 送信に使われたプロトコルの名前とレビジョン情報。
SERVER_SOFTWARE 起動したサーバソフトウエアの名前とバージョン情報。
REMOTE_ADDR リモートホストのIPアドレス情報。
REMOTE_HOST リモートホストのドメイン名。
REMOTE_USER ユーザの認証名。
REMOTE_IDENT リモートホストのユーザ名。
REQUEST_METHOD リクエストを送信した方法。
REQUEST_URI リクエストされたURI。
SCRIPT_FILENAME 現在実行しているスクリプト名。
PATH_INFO クライアントから送られるパス情報。
QUERY_STRING URL に付加して渡された "?" 以降の文字列。
AUTH_TYPE ユーザを認証するときに使用する認証方法。
TIME_YEAR サーバのシステム日付・年
TIME_MON サーバのシステム日付・月
TIME_DAY サーバのシステム日付・日
TIME_HOUR サーバのシステム日付・時
TIME_MIN サーバのシステム日付・分
TIME_SEC サーバのシステム日付・秒
TIME_WDAY サーバのシステム日付・曜日
TIME サーバのシステム日付・Unix タイムスタンプ。

".htaccess" ファイルにおける Rewrite の記述方法

一般的な書式


RewriteEngine on

RewriteBase /



#ドメインの統一

RewriteCond %{HTTP_HOST} ^(example\.com)(:80)? [NC]

RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]



#ディレクトリの移転

RewriteRule ^old_dir(.*)$ /new_dir$1 [R=301,L]



#ファイルの移転

RewriteRule ^old_dir/index\.html$ /new_dir/index.html [R=301,L]



#クローラのアクセス禁止

RewriteCond %{HTTP_USER_AGENT} Badbot-1 [NC, OR]

RewriteCond %{HTTP_USER_AGENT} Badbot-2 [NC]

RewriteRule !^robots\.txt$ - [F]



RewriteEngine off


*注 書き換え対象に正規表現の特殊文字が含まれている場合は、 "\" (日本語環境では円マーク) でエスケープします。
*注 書き換え対象 "old_dir" が、 "/" から始まっていないことに注意してください。
*注 書き換え後 "/new_dir" が、 "/" から始まっていることに注意してください。

ファイルの移転

リクエストに対して、ファイルが移転したことを知らせます。


RewriteRule ^old_dir/index\.html$ /new_dir/index.html [R=301,L]

【解説】(行頭から)old_dir/index.html(行末まで)のアクセスを "/new_dir/index.html" にリダイレクトし、ここではファイルが永久に移転したことを通知しています。 書き換えが行われたら終了。

ディレクトリの移転

リクエストに対して、ディレクトリ全体が移転したことを知らせます。
"http://~" から記述することにより、外部ドメインへのリダイレクトも可能です。


# 内部移転

RewriteRule ^old_dir(.*)$ /new_dir$1 [R=301,L]

# 外部移転

RewriteRule ^old_dir(.*)$ http://www.example/new_dir$1 [R=301,L]

【解説】".*" =任意の1文字0回以上の繰り返し。 (.*) の値が、後方参照 $1 に入ります。

拡張子の変更

リクエストに対して、ファイルの拡張子を書き換えてリダイレクトします。


# 拡張子が ".html" のファイルを、全て ".phpl" に変更する

RewriteRule ^(.*)\.html$ /$1.php [R=301,L]



# 特定のディレクトリに対して、ファイルの拡張子を変更する

RewriteCond %{REQUEST_URI} ^/example/ [NC]

RewriteRule ^(.*)\.html$ /$1.php [R=301,L]



# 特定のディレクトリを除いて、ファイルの拡張子を変更する

RewriteCond %{REQUEST_URI} !^/example/ [NC]

RewriteRule ^(.*)\.html$ /$1.php [R=301,L]

【解説】特定のディレクトリに関しては、(行頭から)"/example/" の大小を問わない文字を含む(もしくは含まない)アクセスに対して、拡張子 ".html" を ".php" に書き換えてリダイレクトしています。 ここではファイルが永久に移転したことを通知しています。 書き換えが行われたら終了。

サーバ移転(サイトの引越し)

リクエスト全体を、新しいドメインへリダイレクトします。


RewriteRule ^(.*)$ http://www.new-example.com/$1 [R=301,L]

【解説】HTTPステータスコード "R=301(Moved Permanently)" を付加することにより、URLが永久に移動したことを検索サイトのクローラに通知します。 この処理で、旧サイトのページランクを自動的にほぼ引き継ぐことができます。
検索サイトへの反映は、クローラにもよりますが、1週間から1ヶ月ほどかかります。

ドメインの統一

サーバーは1つのドメイン、例えば "example.com" に対して、"www.example.com" でもリクエストを受け付けます。
host がサブドメインを使用している場合は、更に "example.host.com" と "www.example.host.com" でも閲覧可能になり、合計4つのサイトにアクセスが分散することになります。
これは、 SEO 対策上あまり好ましいことではありません。 ここでは、"Rewrite" を使って、"www.example.com" に統一する場合を記述します。

◇サブドメインを使用していない場合

RewriteCond %{HTTP_HOST} ^(example\.com)(:80)? [NC]

RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

◇サブドメインを使用している場合

RewriteCond %{HTTP_HOST} ^(example\.com)(:80)? [NC,OR]

RewriteCond %{HTTP_HOST} ^(example\.host\.com)(:80)? [NC,OR]

RewriteCond %{HTTP_HOST} ^(www\.example\.host\.com)(:80)? [NC]

RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

アクセス制限

サーバ変数を取得して、アクセス制限を掛けます。
アクセス制限は、サーバに思わぬ負荷をかけることがあります。 不必要なアクセス制限はできるだけ掛けないようにしてください。
*注 十分にアクセス情報を解析してから設定してください。 設定によっては正当な訪問者もアクセスできなくなる可能性があります。

  • [F] は、「Forbidden(アクセス禁止)」を意味します。
  • 特殊文字の前に "\"(日本語環境では円マーク)を付加する事に注意してください。
  • "REMOTE_HOST" は、サーバーによっては取得できない場合があります。
◇特定のホストからのアクセスを全て禁止する

RewriteCond %{REMOTE_HOST} ^example\.com$ [NC, OR]


RewriteCond %{REMOTE_ADDR} ^192\.168\.1\.

RewriteRule ^.* - [F]

【解説】"REMOTE_HOST" が取得できない場合は、 "REMOTE_ADDR" を使用してアクセス制限をかけます。

◇特定のブラウザからのアクセスを全て禁止する

RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0 \(compatible; MSIE 6\.0\)$ [NC]

RewriteRule ^.* - [F]

◇特定の Referer からのアクセスを全て禁止する

RewriteCond %{HTTP_REFERER} ^http://www\.example\.com/bad\.html$ [NC]

RewriteRule ^.* - [F]

◇特定の Referer 以外からのアクセスを全て禁止する(=特定の Referer からのみアクセスを全て許可する)

RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/good\.html$ [NC]

RewriteRule ^.* - [F]

◇直リンクを全て禁止する

RewriteCond %{HTTP_REFERER} !example\.com [NC]

RewriteRule ^.* - [F]

【解説】Referer が "example.com" を含まないリクエストに対して、全てのアクセスを禁止します。

◇画像の直リンクを禁止する

RewriteCond %{HTTP_REFERER} !example\.com [NC]

RewriteRule \.(jpg|png|gif)$ - [F]

【解説】Referer が "example.com" を含まないリクエストに対して、拡張子が ".jpg" または ".png" または ".gif" へのアクセスを禁止します。

◇特定のホスト & 特定のブラウザからのアクセスを禁止する

RewriteCond %{REMOTE_ADDR} ^192\.168\.1\.

RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0 \(compatible; MSIE 6\.0\)$

RewriteRule ^.* - [F]

◇特定の検索ロボット(クローラ)に対して、 "robots.txt" 以外のアクセスを禁止する

クローラのアクセス禁止は、サーバの負荷を伴います。 そこで先に、ここに記述する全てのクローラを "robots.txt" で拒否しておきます。 それを無視した悪質クローラだけを、最終的にここでアクセス禁止にします。


RewriteCond %{HTTP_USER_AGENT} Badbot-1 [NC, OR]

RewriteCond %{HTTP_USER_AGENT} Badbot-2 [NC, OR]

RewriteCond %{HTTP_USER_AGENT} Badbot-3 [NC, OR]

RewriteCond %{HTTP_USER_AGENT} Badbot-n [NC]

RewriteRule !^robots\.txt$ - [F]

【解説】"HTTP_USER_AGENT" が、 "Badbot-1", から "Badbot-n" の文字(文字の大小を区別しない)を含むクローラに対して、 "robots.txt" 以外のアクセスを禁止します。
※悪質クローラに対する対策の詳細は: 検索ロボット対策 をご覧ください。

 

参考サイト

トラックバック(0)

トラックバックURL:


グーグルマップのAPIがV3になってから今まで必要だったAPIキーが不要になっているらしい。

 

地図を表示する機会があったので、会社の所在地でマーカー付のサンプルを作ってみた。

意外に簡単。

 

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>GoogleMapsApiV3で地図を表示</title>

<!--↓↓GoogleMapApiV3↓↓-->
<script type='text/javascript' src='http://www.google.com/jsapi'></script>
<script type='text/javascript'>google.load('jquery', '1.3.2');</script>
<script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=false&language=ja' charset='UTF-8'></script>
<script type="text/javascript">
	$(document).ready(function() {
	  var mapdiv = document.getElementById('map_canvas');
	  var geocoder = new google.maps.Geocoder();
	  var point = new google.maps.LatLng(34.057488,131.808716);
	  var myOptions = {
			  zoom: 12,
			  center: point,
			  mapTypeControl: true,
			  navigationControl: true,
			  navigationControlOptions: { style: google.maps.NavigationControlStyle.SMALL},
			  mapTypeId: google.maps.MapTypeId.ROADMAP,
			  scaleControl: true
	  };
	
	  var map = new google.maps.Map(mapdiv, myOptions);
	  var marker = new google.maps.Marker({
		  position: point,
		  map: map,
		  draggable: true
	  });
	});
</script>
<!--↑↑GoogleMapApiV3↑↑-->

</head>
    <body>
        <div id="map_canvas" style="width: 560px; height: 250px;"></div>
    </body>
</html>

 

こういうコードを簡単に作ってくれるサイトやフォームがあればいいのにね。

トラックバック(0)

トラックバックURL:


会社のイントラネットに簡単な送付状システムをASPで構築していますが、

印刷用にレイアウトしてあるHTMLで内容を表示して印刷しています。

ところが、HTMLのレイアウトだと会社のロゴや広告などの画像が72dpi程度でしが出力されないため、ガタガタに印刷されます。

そこで、PDFであれば画像もキレイに出力できるはず!?

ということで、PDFで出力できるようにしてみました。

 

必要なもの

 

必要な作業

  • FdfAcx.dllFdfTk.dllをサーバーのsystem32フォルダにコピー
  • コマンドプロンプトでレジストリにFdfAcx.dllを登録
    C:\winnt\> cd \winnt\system32      ←コピー先に移動
    C:\winnt\system32> regsvr32 FdfAcx.dll ←レジストリーに登録
    

ASPのソースサンプル

Dim FdfAcx,resFDF

'FDF ActiveX オブジェクトの定義
Set FdfAcx = Server.CreateObject("FdfApp.FdfApp") 

'新しいFDF生成
Set resFDF = FdfAcX.FDFCreate

'PDFフォーム欄と値
resFDF.FDFSetValue "atena","株式会社◯◯御中",False
resFDF.FDFSetValue "naiyo","お世話になります。",False
 
'テンプレートPDFのURL(フルパスが望ましい)
resFDF.FDFSetFile "http://192.168.XX.X/soufujyou/print.pdf" 

'設定結果のFDFをファイル名を付けてクライアントでダウンロード
Response.ContentType = "application/vnd.fdf" 'MIMEタイプ FDF
Response.BinaryWrite resFDF.FDFSaveToBuf 'FDFデータをバッファーに出力


'クローズ
resFDF.FDFClose
set resFDF = nothing
set FdfAcx = nothing

テンプレートとなるPDFに宛名を表示する「atena」と、送付状の内容を表示する「naiyo」と名前を付けたフォームを埋め込み、上記のソースにアクセスすれば値が入力されたPDFが表示されます。

ここまでできれば、あとはデータベースや入力フォームからの値を表示したりと便利に改造できます。

動的に画像を表示したりするには、また少し違うやり方をしないといけないようです。

 

参考サイト

トラックバック(0)

トラックバックURL:


最近よく見かけるGoogleの『+1』(プラスワン)ボタン。

設置は意外に簡単。

とりあえずメモ。

 

以下参照

トラックバック(0)

トラックバックURL:


SNSが増えてミクシィ派のグループもあればTwitterのお付き合いやFacebookの集まりもあり、全部にちまちま投稿するのも面倒になってきましたが、そんな悩みを解決できるウェブサービスを見つけました。

 

ブログのRSSフィードを登録すると以下のSNSに自動でブログ記事の更新を投稿してくれます。

Twitter、Facebook、Google Buzz、LinkedIn、MySpace、Status.net、Tumblr、ping.fn

 

Mixi、GREEはTwitterと連携させておけばいいので、あとはブログの記事を書けばフルオートで投稿ができて完璧!

 

dlvr.itに登録する方法

  1. http://dlvr.it/にアクセスしてサインアップする。
    sc0000.jpg
  2. ブログのRSSフィードのURLを登録する。
    sc0001.jpg
  3. とりあえずTwtterを選択し、Twitterのアクセス許可をして終わり。
    (事前にTwitterはログイン状態にしておいたほうがいいです。)
    sc0002.jpg

あとから他のSNSに登録する方法

  1. ログインする。
    sc0000-2.jpg
  2. 「+Add Route」をクリック。
    sc0003.jpg
  3. 「+add」を押す。
    sc00020.jpg
  4. ブログのRSSフィードを選択。
    (新規にURLを登録するか、すでに選択済みのフィードを選択)
    sc00022.jpg
  5. 「+add」を押す。
    sc00020-2.jpg
  6. 自動投稿したいSNSを選択。
    sc0004.jpg
  7. 投稿先のSNSのアクセス許可をする。
    (これをしないとエラーになり登録ができない。)
    sc0005.jpg
    「save」を押して登録完了。

その他の詳しいことは以下のサイトが参考になります。

トラックバック(0)

トラックバックURL:


ライブラリをインクルードしてたった数行で、WEBスクレイピング(HTML内を部分的に取り出し、表示する)ができる恐ろしいPHPライブラリを見つけました。

ライブラリは上記よりダウンロードできます。

<?php

    include_once($_SERVER['DOCUMENT_ROOT']."/lib/simplehtmldom/simple_html_dom.php");
    
    $html = file_get_html('http://hoshiya.biz');  
       
    foreach($html->find('title') as $row)
    $row = $row->plaintext;
    $row = mb_convert_encoding($row, mb_internal_encoding(), "auto" );  
    echo $row;

?>

たったこれだけで取得できます。

find()で取り出したい条件や要素を記入するだけです。

恐ろしく簡単で便利なのはタグはもちろん、idやclassも指定できるし、そのタグ自体を抽出することもできます。

検索結果の一覧や、リンク集なども楽に抽出ができそうな感じです。

その他の使い方などは「PHP Simple HTML DOM Parserマニュアルページ」を参照してみてください。

参考サイト

関連記事

トラックバック(0)

トラックバックURL:


指定したURLのHTMLソースから目的のタグ内の文字列をSQL文で取り出すことができるライブラリを見つけました。

今までは正規表現を使って文字列を取得していましたが、このライブラリならタグはもちろん、idやclassまで検索対象にできるスグレモノで、SQLの文法と配列が理解できれば、いろいろなことに使えそうです。

このように「HTML内を部分的に取り出し、表示する」ことを「Webスクレイピング」というそうです。

使用準備

  • ライブラリをダウンロードして任意のディレクトにアップロード。
  • 利用するファイルに「snoopy.class.php」と「htmlsql.class.php」をインクルード。

使用例

<?php

include_once($_SERVER['DOCUMENT_ROOT']."/lib/snoopy.class.php");
include_once($_SERVER['DOCUMENT_ROOT']."/lib/htmlsql.class.php");

function getTitle($url){

	$wsql = new htmlsql();
	
	// connect to a URL
	if (!$wsql->connect('url', $url )){
	print 'Error while connecting: ' . $wsql->error;
	exit;
	}
	
	// execute a query:
	if (!$wsql->query('SELECT * FROM title')){
	print "Query error: " . $wsql->error;
	exit;
	}
	
	// show results:
	foreach($wsql->fetch_array() as $row){
	
	//print_r($row);
	echo $row['text'];
		
	}

}

getTitle("http://hoshiya.biz");

?>

ちなみに、print_r($row)とすると、$rowに格納されている配列の内容が確認できます。

$rowの中身→ Array ( [tagname] => title [text] => 星屋工作室 )

例文

その他の例文はまた今度...。

制限

<div>の中の<div>など、同じタグに囲まれている文字列や要素はダイレクトに取得できず、一度大枠を取得して、再度その中から抜き出さなければならないようです。

関連記事

トラックバック(0)

トラックバックURL:


できるだけ短いドメインが欲しいと思ったら「1文字」がベストですが、 次へ

2文字ドメインもすべて取得済みなので、新規で登録でできる文字数は「3文字」が一番短いわけですが、

どのドメインが取得可能なのか、いちいち調べるのがメンドクサイし、

やってみたけど、イイナと思うのはすべて取得済み。

ビビっとくる文字列がないか、一括見れるサイトがあればなぁ~と思ったら結構あった。

でも、ほとんどが「.jp」...。

これ以外のTLD(トップレベルドメイン)も探せたらいいのになぁ~

 

まぁ、それ以前に必要とされるサイトに仕上げることのほうが重要だな...。

トラックバック(0)

トラックバックURL:


インターネットで買う側も売る側も、

商品の配送状況が簡単にわかるようにしたいけど、

宅急便各社がAPIを用意していないので、

いちいち各社のホームページを調べて開かないといけませんが、

1か所で簡単に調べられるフォームを自力で作られた方のホームページを見つけたのでメモ。

できればJavascriptで自分のサイトにペタっと貼れるガジェットみたいなのが欲しい...。

クロネコヤマト、佐川急便、日本郵便、ペリカン便、西濃運輸、福山通運、FeDexあたりの大手はAPIを提供してくれればいいのに...。

関連記事

トラックバック(0)

トラックバックURL:


ソースをキレイに表示してくれる「SyntaxHighlighter3」ですが、

少々不満あり。

カスタマイズ方法を詳しく書いてくれているページ発見!

トラックバック(0)

トラックバックURL:


イントラネットで表示されているページを印刷しようとすると、

A4・で印刷したいのに、デフォルトはA4・になっているため、

印刷設定を毎回「」に変更しなくてはならない事にガマンの限界が...。

 

Windowsサーバーなので、

イントラネットはIIS上のASPで作っており

一部PHPを使っています。

 

印刷設定(用紙設定)はASPやJavascriptの関数があるんかな?

といろいろ検索しましたが見つかりませんでした...。

 

しかし、替わりに見つけたのはActtiveXコントロール「ScriptX」を使った方法!

まず以下のページで「Dowload smsx.cab」ボタンを押してダウンロード

任意のディレクトリにアップロード

印刷設定を使うページに以下のコードを挿入し、

<object>タグでActiveXコントロール読み込む。

<!-- ScriptX 読み込み -->
<object id=factory style="display:none"
 classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
 codebase="http://**smsx.cabを設置した場所のパス**/smsx.cab#Version=6,5,439,72(←バージョンによって書き換える)">
</object>
<!-- ScriptX 読み込み -->

次にJavascriptファンクションで印刷設定を行う。

<script type="text/javascript">
	function printWindow() {
		factory.printing.header = "ヘッダ名";
		factory.printing.footer = "フッタ名";
		factory.printing.portrait = false; // 用紙方向 true: 縦 false: 横
		factory.printing.leftMargin = 1.0;
		factory.printing.topMargin = 1.0;
		factory.printing.rightMargin = 1.0;
		factory.printing.bottomMargin = 1.0;
		factory.printing.Print(false); // 印刷実行 ture: 印刷ダイアログなし false: 印刷ダイアログあり
}
</script>

あとはファンクションを呼び出すだけでOK!

 <input type="button" value="ScriptXで印刷" onclick="printWindow();" />
自分の場合は印刷ページ表示と同時に印刷するので、
 <body onload="printWindow();" />

としました。

 

※初回使用時は「ActiveXをインストールしますか?」見たいな警告が出ますが、インストールしてしてください。

 

その他

ヘッダ・フッタに、現在日・ページ数出力

factory.printing.header = "ヘッダ名 &b 日付: &d";   // 現在日出力
factory.printing.footer = "フッタ名 &b &p/&P ページ";     //   ページ数出力

これでイントラネットとインターネットでヘッダー・フッター印刷を切り分けられそうなのがいいです。

ヘッダーとフッターで使える記号

  • &w : 印刷するホームページのタイトル
  • &u : 印刷するページのアドレス
  • &d : 現在の日付(xxxx/xx/xx 形式)
  • &D : 現在の日付(xxxx年xx月xx日 形式)
  • &t : 現在の時刻(コントロールパネルの「地域」で設定されている形式)
  • &T : 現在の時刻(xx:xx:xx 形式)
  • &p : 現在のページ番号
  • &P : 総ページ数
  • &b : 右揃えの文字列(「&b」に続けて文字列を入力)
  • &b&b : 中央揃えの文字列(最初の「&b」に続けて文字列を入力)と右揃えの文字列(2 番目の「&b」に続けて文字列を入力)
  • && : アンパサンド(&)

 

直接印刷(印刷ダイアログ表示なし)だけを直接使う

factory.printing.Print(true);

 

プレビュー画面を表示

factory.printing.Preview();

 

ActiveXコントロールだけにWindowsサーバー上じゃないと動かないとは思うのですが、

WindowsサーバーであればIISじゃなくてもApatchでも動き、

<object>タグで「smsx.cab」さえ読み込めばPHPでも使えるようなことが書かれたページがありました。

 

有償版もあるようですが、用紙サイズの指定とかもできるみたいです。

トラックバック(0)

トラックバックURL:


Googleバズ公式のフォローバナーと投稿ボタンを設置するためのページがありました。

↓ボタン作成のページ

↓フォローバナー作成のページ

↓自分のバナー作ってみた。

 

バズでフォロー

トラックバック(0)

トラックバックURL:


何かとサイトサムネイルで重宝するMozshotですが、

サムネイル表示のために、毎回URLの指定やソースの調整をすることがだんだん苦になってきました。

簡単にサイトサムネルを表示するファンクションのサンプルがあったので自分なりに改造し、

指定URLのタイトル取得とMozshotのサムネイルにリンクを組み合わせてみました。

<?php
/*---- 指定したURLのソースを取得 ----*/

function getURL( $pURL ) {
   $_data = null;
   if( $_http = @fopen( $pURL, "r" ) ) {
      while( !feof( $_http ) ) {
         $_data .= fgets( $_http, 1024 );
      }
      fclose( $_http );
   }
   return( $_data );
}


/*---- ソース内にある余計な改行コードを取り除く----*/

function cleanString( $pString ) {
   $_data = str_replace( array( chr(10), chr(13), chr(9) ), chr(32), $pString );
      while( strpos( $_data, str_repeat( chr(32), 2 ), 0 ) != false ) {
         $_data = str_replace( str_repeat( chr(32), 2 ), chr(32), $_data );
      }
      return( trim( $_data ) );
}


/*---- 指定した最初タグ内にある文字列を取得 ----*/

function getElement( $pElement, $pSource ) {

   //取得できなかった場合の代替テキスト
   if(empty($pSource)){
		$pSource = chr(60).$pElement.chr(62)."Pages".chr(60)."/".$pElement.chr(62);
   }

   $_data = null;
   $pElement = strtolower( $pElement );
   $_start = strpos( strtolower( $pSource ), chr(60) . $pElement, 0 );
   $_start = strpos( $pSource, chr(62), $_start ) + 1;
   $_stop = strpos( strtolower( $pSource ), "</" . $pElement .    chr(62), $_start );
   if( $_start > strlen( $pElement ) && $_stop > $_start ) {
      $_data = trim( substr( $pSource, $_start, $_stop - $_start ) );
   }
   return( $_data );
}

	
/*---- Mozshot用ファンクション ---*/
	
function mShot($url,$s){

	if ($url) {
	$sData = getURL( $url );	
	$sData = cleanString( $sData );
	$sData = getElement( "title", $sData );
	mb_language( 'Japanese' );
	$title = mb_convert_encoding($sData, "UTF-8", "auto");
	}
	
	$imgSize[0] = '64';
	$imgSize[1] = '128';
	$imgSize[2] = '256';
	
	$thumbUrl[0] = "/small";
	$thumbUrl[1] = "";
	$thumbUrl[2] = "/large";
	
	$a = "<div id=¥"mShot¥"><a href=¥"".$url."¥" target=¥"_blank¥">¥n";
	$a = $a."<strong class=¥"title¥">".$title."</strong><br />¥n";
	$a = $a."<span class=¥"url¥">".$url."</span><br />¥n" ;
	$a = $a."<img src=¥"http://mozshot.nemui.org/shot".$thumbUrl[$s]."?".$url."¥" width=¥"".$imgSize[$s]."¥" height=¥"".$imgSize[$s]."¥" alt=¥"".$title."¥" />¥n";
	$a = $a."</a></div>¥n" ;
	echo $a;

}
?>

 

上記のfunction.phpをサムネイル表示を使うページindex.phpでインクルードして使う。

<?php include_once $_SERVER['DOCUMENT_ROOT']."/include/function/function.php";?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Mozshotファンクションテスト</title>
<style type="text/css">
<!--
	#mShot {
		padding: 0px;
		margin: 0px;
	}
	#mShot .title {
		font-weight: bold;
	}
	#mShot .url {
		font-size: small;
	}
	#mShot img {
		border: none;
	}
-->
</style>
</head>
<body>
	<?php mShot("http://hoshiya.biz",0);?>
   <?php mShot("http://hoshiya.biz",1);?>
   <?php mShot("http://hoshiya.biz",2);?>
</body>
</html>

このサイト用のCSSを適用しているので、

色は違いますが、実際に表示すると

<?php mShot("http://hoshiya.biz",0);?>の場合

<?php mShot("http://hoshiya.biz",1);?>の場合

<?php mShot("http://hoshiya.biz",2);?>の場合

となります。

 

参考ページ

トラックバック(0)

トラックバックURL:


PHPのライブラリ「PEAR」を使ったら、

Whoisサーバーからドメインの登録情報が取得できるらしい。

 時間があるときにチャレンジしてみる。

トラックバック(0)

トラックバックURL:


このサイトでドメイン情報をXMLで取得できるっぽい。

ドメインが取得できるかどうかを調べるスクリプトに使えそう...。

トラックバック(0)

トラックバックURL:


なかなかよさそうな日めくりカレンダー風のアイコンを探してみて

よさそうなものを見つけた。

トラックバック(0)

トラックバックURL:


最近のサイトでよく見るソースをきれいに見せるJavascriptです。

↓これ

<pre class='brush:php'>
	<?php
		$p = "サンプル";
		echo $p;
	?>
</pre>

 

自分のホームページにも導入したいと思っていろいろ探しました。

現在の最新は「SyntaxHighlighter 3.0.83」のようです。

まずダウンロードして適当な場所に保存して解凍

 

ダウンロードファイルはこれ↓

http://alexgorbatchev.com/SyntaxHighlighter/download/download.php?sh_current

 

「ルートディレクトリ/js/SyntaxHighlighter」に保存した場合。

<head>~</head>内に以下を追加


  

	
	
    

 

	  
    
    
    
    
    
    
    
    


ハイライト部分は必須。

 

ソースを表示する場所に以下のように記載すればOK。

'brush:php'の部分は表示する言語によって変更する)

<pre class='brush:php'>
	<?php
		$p = "ようこそ";
		echo $p;
	?>
</pre>

 

意外にカンタン...。

 

その他、テーマ言語オプションを指定できるようです。

英語の説明ページですが、なんとなくでも理解できました。

なんかウレシイ。

 

参考ページ

トラックバック(0)

トラックバックURL:


レンタルサーバーはロリポップで、

Movable Type 4をMT5にアップグレードした。

ついでに

  • ディレクトリ: ルート → ルート/blog
  • 拡張子: .html → .php

に変更した。

 

しかし、前のブログにアクセスがあるため、以下の選択肢を考えた。

  • 古いブログ(MT4)と新しいブログ(MT5)と共存させる。
  • 古いブログ(MT4)にアクセスがあったら、新しいブログ(MT5)に転送させる。

結果、新しいブログに転送させるほうが効率が良いので、

.htaccessに正規表現で以下の事を加えて実現できた。

URLのRewriteというApatchの機能らしい。

 

http://***.com/2010にアクセスがあったら、

拡張子を.htmlから.phpに変更して、

http://***.com/blog/2010/***.phpにリダイレクトする。

 RewriteEngine On
 RewriteCond %{REQUEST_URI} ^/2010.*$
 RewriteRule ^(.*)\.html$ /$1.php [NC,R]
 RewriteRule ^2010(.*)$ /blog/2010$1 [R,L]


とりあえずできたものの、

正規表現というものを使ったことがなく、

理解するまでには時間がかかりそうです。

 

フォルダごとにこのルールを設定するのは大変なので、

課題として、複数のフォルダに対して一度にルールを適用できるようしたいと思います。

 

参考ページ

トラックバック(0)

トラックバックURL:


APIを使って短縮URLを取得して表示したくて、

PHPで変数に入れたURLを短縮して受け取る方法を探して以下のAPIが候補に上がった。

  • tinyurl.com ... 特に何かの登録がいるわけではない
  • bit.ly(j.mp) ... ユーザー登録をしてAPIキーを取得する必要あり
  • goo.gl ... 調査中

tinyurl.comを利用した例

<?php
$url1 = "http://tinyurl.com/api-create.php?url=";
$url2 = "http://hoshiya.biz"; //短縮したいURLを入れる
$url3 = $url1.$url2;
$url4 = file_get_contents($url3); //短縮されたURLを取得
echo "<a href=\"".$url2."\">".$url2."</a>が<a href=\"".$url4."\">".$url4."</a>に短縮されました。";
?>

 

参考サイト
Twitter 短縮URL TinyURLのAPI
http://memorva.jp/memo/api/twitter_tinyurl.php

 

bit.ly(j.mp)を利用した例

<?php
//短縮URLを取得する
function shorten_url($url){

$bitly_user = '******'; //bit.lyに登録したユーザー名を入れる
$bitly_apikey = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'; //発行されたAPIキーを入れる

//j.mpを使いたい場合はbit.lyと入替える
$bitlyurl = 'http://api.bit.ly/shorten?version=2.0.1&login='.$bitly_user.'&apiKey='.$bitly_apikey.'&longUrl='.$url;
$context = stream_context_create(array('http' =>
array(
'method' => 'GET',
'timeout' => 5
)
));
$ret = file_get_contents($bitlyurl,false,$context);
if($ret !== FALSE){
$json = json_decode($ret, true);
if($json['statusCode'] == 'OK') {
$surl = $json['results'][urldecode($url)]['shortUrl'];
return $surl;
}
}
return FALSE;
}

$url = "http://hoshiya.biz"; //短縮したいURL

echo "<a href=\"".$url."\">".$url."</a>が<a href=\"".shorten_url($url)."\">".shorten_url($url)."</a>に短縮されました。";
?>

 

参考サイト
twitter/URL短縮する(bit.ly)
http://hodade.adam.ne.jp/itmemo/index.php?twitter%2FURL%C3%BB%BD%CC%A4%B9%A4%EB(bit.ly)

トラックバック(0)

トラックバックURL:


ブログなどでワイポイントアイテムとして使えるタグアイコン
http://bunbun.mods.jp/2010/09/sozai/icon/icon_003/
ブログなどでワイポイントアイテムとして使えるタグアイコン

トラックバック(0)

トラックバックURL:


こんな高機能な無料サンプル見つけたのでメモ。

 

トラックバック(1)

トラックバックURL:

&nbsp;web tips サンプルを追加しました 3桁毎カンマ挿入制御ページ内のすべての3桁以上の半角数字の数値に、ロード時に3桁区切りカンマ... 続きを読む

代替画像の表示でFLASHが表示できないiPhone対策

会社のホームページはパソコン用のサイトで、

メイン画像がFLASHでできております。

iPhoneを持っているのですが、

FLASHが表示できないため、

なんか替わりの画像が表示できたらなぁ~と方法を検索したら簡単に見つかりました。

 

早速導入してみようということで実践したら、

Javascriptのライブラリの設置がいるものの、

ちょ~簡単にできた。

通常のFLASH画像を設置するよりも簡単じゃないですか!?

 

しかし、またJacascriptが増えてしまった...。

 

以下を参考にさせていただきました↓

swfobject.js を使って Flash と代替画像を切り替える方法
http://www.drk7.jp/MT/archives/001481.html
swfobject.js を使って Flash と代替画像を切り替える方法

トラックバック(0)

トラックバックURL:


ホームページの仕様でjQueryとprototypeを同時に使用するサイトをいじくっていたら

あらゆるjavascriptが競合して動いたり動かなかったりするので

ググってみたら共存方法がありました。

以下参考↓

トラックバック(0)

トラックバックURL:


配列をうまく使えないので、同じような処理を繰り返しており課題はあるものの

なんとかラジオボタンで選択した金額を計算できる自動見積りフォームを作ってみた。

 


見積金額
合計:0
消費税:0
税込合計:0

見積り

下記項目を選択すると自動計算します。

商品 グレード5 グレード4 グレード3 グレード2 グレード1 数量
液晶テレビ 120,000円 40,000円 20,000円 15,000円 10,000円
エアコン 80,000円 60,000円 40,000円 20,000円 10,000円
パソコン 60,000円 40,000円 20,000円 10,000円 5,000円
             
合計          
消費税          
税込合計          

 

ソース

<div onscroll="display_account()">
<script type="text/javascript">
<!--

function keisan(){

var tax = 5; // 消費税率
var i;
var p1 = 0;
var p2 = 0;
var p3 = 0;

var goods1 = document.getElementsByName("goods1"); //チェック済みのラジオボタンを調べて値を取得
for(i=0; i<goods1.length; i++){
if(goods1[i].checked){
p1 = goods1[i].value;
break;
}
}

var goods2 = document.getElementsByName("goods2"); //チェック済みのラジオボタンを調べて値を取得
for(i=0; i<goods2.length; i++){
if(goods2[i].checked){
p2 = goods2[i].value;
break;
}
}

var goods3 = document.getElementsByName("goods3"); //チェック済みのラジオボタンを調べて値を取得
for(i=0; i<goods3.length; i++){
if(goods3[i].checked){
p3 = goods3[i].value;
break;
}
}

var price1 = p1 * document.form1.volume1 .selectedIndex; // 数量×単価
var price2 = p2 * document.form1.volume2 .selectedIndex; // 数量×単価
var price3 = p3 * document.form1.volume3 .selectedIndex; // 数量×単価

var total1 = parseInt(price1)+ parseInt(price2)+ parseInt(price3); // 税抜き合計を計算
var tax2 = Math.round((total1 * tax) / 100); //消費税を計算
var total2 = total1 + tax2; //税込み合計を計算

//表示用の金額を3桁区切りに変換
var data = new Array(total1,tax2,total2); //金額を配列に格納
var len = data.length; //配列の数を取得

for(cnt=0;cnt<len;cnt++){
data[cnt] = new String(data[cnt]).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); //ここで正規表現で3桁ごとにカンマで区切る
}

//フォームのテキストエリアに表示する金額
document.form1.field_total1.value = data[0]; // 税抜き合計
document.form1.field_tax.value = data[1]; // 消費税
document.form1.field_total2.value = data[2]; // 税込合計

//右の窓に表示する金額
document.getElementById("display_account_amount").innerHTML = data[0]; // 税抜き合計
document.getElementById("display_account_tax").innerHTML = data[1]; // 消費税
document.getElementById("display_account_all").innerHTML = data[2]; // 税込合計

}

// -->
</script>
<script type="text/javascript">
<!--
function display_account() {
var position_top = ( document.body.scrollTop || document.documentElement.scrollTop || window.scrollTop ) ; if ( parseInt(position_top) > 170 ){
document.getElementById("display_account").style.top = position_top + "px"; } } window.onload = function() {
var isIE = 0<=window.navigator.userAgent.indexOf("MSIE");
if(isIE && document.compatMode=="BackCompat"){
document.body.onscroll = display_account;
}else{
document.documentElement.onscroll = display_account;
}
}
//-->
</script>
<div id="display_account" style="position:absolute;top:170px;right:20px;z-index:100;width:200px;"> 見積金額<br />
合計:<span id="display_account_amount">0</span> 円<br />
消費税:<span id="display_account_tax">0</span> 円<br />
税込合計:<span id="display_account_all">0</span> 円<br />
</div>
<h1>見積り</h1>
<p>下記項目を選択すると自動計算します。</p>
<form name="form1" action="" id="form1" method="post">
<table>
<tr>
<td>商品</td>
<td>グレード5</td>
<td>グレード4</td>
<td>グレード3</td>
<td>グレード2</td>
<td>グレード1</td>
<td>数量</td>
</tr>
<tr>
<td>液晶テレビ</td>
<td><input type="radio" name="goods1" id="goods1" value="120000" onClick="keisan()" />
120,000円</td>
<td><input type="radio" name="goods1" id="goods1" value="40000" onClick="keisan()" />
40,000円</td>
<td><input type="radio" name="goods1" id="goods1" value="20000" onClick="keisan()" />
20,000円</td>
<td><input type="radio" name="goods1" id="goods1" value="15000" onClick="keisan()" />
15,000円</td>
<td><input type="radio" name="goods1" id="goods1" value="10000" onClick="keisan()" />
10,000円</td>
<td><select name="volume1" onchange="keisan()">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select></td>
</tr>
<tr>
<td>エアコン</td>
<td><input type="radio" name="goods2" id="goods2" value="80000" onClick="keisan()" />
80,000円</td>
<td><input type="radio" name="goods2" id="goods2" value="60000" onClick="keisan()" />
60,000円</td>
<td><input type="radio" name="goods2" id="goods2" value="40000" onClick="keisan()" />
40,000円</td>
<td><input type="radio" name="goods2" id="goods2" value="20000" onClick="keisan()" />
20,000円</td>
<td><input type="radio" name="goods2" id="goods2" value="10000" onClick="keisan()" />
10,000円</td>
<td><select name="volume2" onchange="keisan()">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select></td>
</tr>
<tr>
<td>パソコン</td>
<td><input type="radio" name="goods3" id="goods3" value="60000" onClick="keisan()" />
60,000円</td>
<td><input type="radio" name="goods3" id="goods3" value="40000" onClick="keisan()" />
40,000円</td>
<td><input type="radio" name="goods3" id="goods3" value="20000" onClick="keisan()" />
20,000円</td>
<td><input type="radio" name="goods3" id="goods3" value="10000" onClick="keisan()" />
10,000円</td>
<td><input type="radio" name="goods3" id="goods3" value="50000" onClick="keisan()" />
5,000円</td>
<td><select name="volume3" onchange="keisan()">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>合計</td>
<td><input type="text" name="field_total1" size="8" value="0">
円</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>消費税</td>
<td><input type="text" name="field_tax" size="8" value="0">
円</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>税込合計</td>
<td><input type="text" name="field_total2" size="8" value="0">
円</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
</form>
</div>

トラックバック(0)

トラックバックURL:


前回は金額が3桁区切りになっていなかったので、

今回は3桁区切りを加えてみた。

 


見積金額
合計:0
消費税:0
税込合計:0

見積り

下記項目を選択すると自動計算します。

商品   数量
果物
     
合計  
消費税  
税込合計  

 

 

<div onscroll="display_account()">
<script type="text/javascript">
<!--

function keisan(){

var tax = 5; // 消費税率

var price1 = eval(document.form1.goods1.value) * document.form1.volume1 .selectedIndex; // 数量×単価
var price2 = eval(document.form1.goods2.value) * document.form1.volume2 .selectedIndex;
var price3 = eval(document.form1.goods3.value) * document.form1.volume3 .selectedIndex;

var total1 = parseInt(price1)+ parseInt(price2)+ parseInt(price3); // 税抜き合計を計算
var tax2 = Math.round((total1 * tax) / 100); //消費税を計算
var total2 = total1 + tax2; //税込み合計を計算

//表示用の金額を3桁区切りに変換
var data = new Array(total1,tax2,total2); //金額を配列に格納
var len = data.length; //配列の数を取得

for(cnt=0;cnt<len;cnt++){
data[cnt] = new String(data[cnt]).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); //ここで正規表現で3桁ごとにカンマで区切る
}

//フォームのテキストエリアに表示する金額
document.form1.field_total1.value = data[0]; // 税抜き合計
document.form1.field_tax.value = data[1]; // 消費税
document.form1.field_total2.value = data[2]; // 税込合計

//右の窓に表示する金額
document.getElementById("display_account_amount").innerHTML = data[0]; // 税抜き合計
document.getElementById("display_account_tax").innerHTML = data[1]; // 消費税
document.getElementById("display_account_all").innerHTML = data[2]; // 税込合計

}

// -->
</script>
<script type="text/javascript">
<!--
function display_account() {
var position_top = ( document.body.scrollTop || document.documentElement.scrollTop || window.scrollTop ) ; if ( parseInt(position_top) > 170 ){
document.getElementById("display_account").style.top = position_top + "px"; } } window.onload = function() {
var isIE = 0<=window.navigator.userAgent.indexOf("MSIE");
if(isIE && document.compatMode=="BackCompat"){
document.body.onscroll = display_account;
}else{
document.documentElement.onscroll = display_account;
}
}
//-->
</script>
<div id="display_account" style="position:absolute;top:170px;right:20px;z-index:100;width:200px;"> 見積金額<br />
合計:<span id="display_account_amount">0</span> 円<br />
消費税:<span id="display_account_tax">0</span> 円<br />
税込合計:<span id="display_account_all">0</span> 円<br />
</div>
<h1>見積り</h1>
<p>下記項目を選択すると自動計算します。</p>
<form name="form1" action="" id="form1" method="post">
<table>
<tr>
<td>商品</td>
<td>&nbsp;</td>
<td>数量</td>
</tr>
<tr>
<td>果物</td>
<td><select name="goods1" onChange="keisan()">
<option value="0" selected="selected">選択してください</option>
<option value="1000">リンゴ(3個入り)1,000円</option>
<option value="450">バナナ 450円</option>
<option value="35900">パイナップル 650円</option>
</select></td>
<td><select name="volume1" onchange="keisan()">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select></td>
</tr>
<tr>
<td>肉</td>
<td><select name="goods2" onChange="keisan()">
<option value="0" selected="selected">選択してください</option>
<option value="500">牛肉(100g)500円</option>
<option value="400">豚肉(100g)400円</option>
<option value="300">鶏肉(100g)300円</option>
</select></td>
<td><select name="volume2" onchange="keisan()">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select></td>
</tr>
<tr>
<td>魚</td>
<td><select name="goods3" onChange="keisan()">
<option value="0" selected="selected">選択してください</option>
<option value="110">さけ 110円</option>
<option value="120">さば 120円</option>
<option value="130">いわし 130円</option>
</select></td>
<td><select name="volume3" onchange="keisan()">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>合計</td>
<td><input type="text" name="field_total1" size="8" value="0">
円</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>消費税</td>
<td><input type="text" name="field_tax" size="8" value="0">
円</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>税込合計</td>
<td><input type="text" name="field_total2" size="8" value="0">
円</td>
<td>&nbsp;</td>
</tr>
</table>
</form>
</div>

トラックバック(0)

トラックバックURL:


いろいろ探してみて一番よさそうなサンプルを使用して

金額の数値をカンマで3桁に区切り、

表示できるようやってみた。

 

<body onload="addFigure()">

 

<script type="text/javascript">

 

//3桁カンマ区切り

 

function addFigure() {

 

 var str = 1000000000;

 

 str = String(str).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");

 

 document.getElementById("price").innerHTML = str;

}

</script>

 

<div id="price">0</div>

</body>

 

 

これで「1,000,000,000」と表示されるはず

正規表現で数字の間にカンマを置き換えているのですが、

正規表現についてはチンプンカンプンです。

 

 

参考サイト:http://www.coppermine.jp/hasunuma/weblog/2010/05/post.html

トラックバック(1)

トラックバックURL:

&nbsp;web tips サンプルを追加しました 3桁毎カンマ挿入制御ページ内のすべての3桁以上の半角数字の数値に、ロード時に3桁区切りカンマ... 続きを読む

HTTP 405 - 許可されていないリソースです。

とエラーが出る場合。IISでPOST送信が許可されていない場合になるそうです。

ということでネットで調べたら以下の方法が出てきたので試したら解決しました。

 

Windws 2000 Serverの場合

マイコンピュータを右クリックして「管理」を選択

インターネットインフォメーションサービスで該当するサイトを右クリックして「プロパティ」を選択

ホームディレクトリ」タブの「構成」ボタンをクリック

アプリケーションのマッピング」タブの「追加」ボタンを押して以下を追加

実行ファイ → C:\WINNT\System32\inetsrv\ssinc.dll

拡張子 → .html

動詞 → 制限 → GET,POST

ついでに「.htm」も追加しておく。

トラックバック(0)

トラックバックURL:


MagpieRSSをダウンロードして適当なフォルダに保存し、

読み込んだ最新記事一覧を表示するページを作成する。

rss.php

<?php
require_once('magpierss/rss_fetch.inc');
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');

$count = 5; //最新記事表示件数
$length = 60; //表示する日記記事の最大文字数
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<title>RSS表示スクリプト</title>
</head>
<body>
<?php
$url = 'http://hoshiya.biz/index.xml';
$rss = fetch_rss($url);
echo "<ul>";
array_splice($rss->items, $count);
foreach ($rss->items as $item) {
$href = $item['link'];
$title = mb_convert_encoding($item['title'],"SJIS","auto");
$date = date('Y/m/d H:i:s',parse_w3cdtf($item['dc']['date']));
$description = mb_convert_encoding($item['description'],"SJIS","auto");
if (mb_strlen($description) > $length) {
$description =
mb_strcut($description, 0, $length) . "...";
}
echo "<li>";
echo "<FONT color=\"#ff8040\">(" . $date . ")</FONT> ";
echo "<a href=$href>" . $title . "</a><BR>";
echo $description . "</li>";
}
echo "</ul>";
?>
</body>
</html>

PHP5以上の場合は、

Warning: gmmktime() expects parameter 3 to be long, string given in /home/*******/public_html/magpierss/rss_utils.inc on line **

といったエラーが出ます。

そのときは「rss_utils.inc」の35行目 の

$epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year);

 

$epoch = gmmktime( $hours, $minutes, substr($seconds,-2,2), $month, $day, $year);

 

に変更したら正常に表示されました。

参考ページ

http://plaza.rakuten.co.jp/kemusiro/diary/200601150000/

http://d.hatena.ne.jp/ms-k/20051224

トラックバック(0)

トラックバックURL:


モバイルサイトでよく見る数字の絵文字がありますが、

それを表示するためには携帯電話会社各社の絵文字コードを

使用しますが、携帯電話会社によってコードが異なるため、

ユーザーエージェントを判別して各社の絵文字を設定する必要があります。

 

ユーザーエージェントを判別するPHPのスクリプト

<?php
if (eregi("DoCoMo",$_SERVER['HTTP_USER_AGENT'])){
//ドコモ
$num1="&#xE6E2;";
$num2="&#xE6E3;";
$num3="&#xE6E4;";
$num4="&#xE6E5;";
$num5="&#xE6E6;";
$num6="&#xE6E7;";
$num7="&#xE6E8;";
$num8="&#xE6E9;";
$num9="&#xE6EA;";
$num0="&#xE6EB;";
$numsharp="&#xE6E0;";
}
elseif (eregi("^J-PHONE|^Vodafone|^SoftBank|^MOT-",$_SERVER['HTTP_USER_AGENT'])){
//ソフトバンク
$num1="&#xE21C;";
$num2="&#xE21D;";
$num3="&#xE21E;";
$num4="&#xE21F;";
$num5="&#xE220;";
$num6="&#xE221;";
$num7="&#xE222;";
$num8="&#xE223;";
$num9="&#xE224;";
$num0="&#xE225;";
$numsharp="&#xE210;";
}
elseif (eregi("^UP.Browser|^KDDI|^PDXGW",$_SERVER['HTTP_USER_AGENT'])){
//au (<img localsrc="~~"><img localsrc="~~">が公式な方法)
$num1="&#xF6FB;"; //$num1="<img localsrc="180">;
$num2="&#xF6FC;"; //$num2="<img localsrc="181">;
$num3="&#xF740;"; //$num3="<img localsrc="182">;
$num4="&#xF741;"; //$num4="<img localsrc="183">;
$num5="&#xF742;"; //$num5="<img localsrc="184">;
$num6="&#xF743;"; //$num6="<img localsrc="185">;
$num7="&#xF744;"; //$num7="<img localsrc="186">;
$num8="&#xF745;"; //$num8="<img localsrc="187">;
$num9="&#xF746;"; //$num9="<img localsrc="188">;
$num0="&#xF7C9;"; //$num0="<img localsrc="325">;
$numsharp="&#xF489;"; //$numsharp="<img localsrc="818">;
}
elseif (eregi("DDIPOCKET|WILLCOM",$_SERVER['HTTP_USER_AGENT'])){
//ウィルコム
$num1="&#61631;";
$num2="&#61632;";
$num3="&#61633;";
$num4="&#61634;";
$num5="&#61635;";
$num6="&#61636;";
$num7="&#61637;";
$num8="&#61638;";
$num9="&#61639;";
$num0="&#61630;";
$numsharp="[#]";
}
elseif (eregi("^emobile",$_SERVER['HTTP_USER_AGENT'])){
//イー・モバイル(ドコモと同じ)
$num1="&#xE6E2;";
$num2="&#xE6E3;";
$num3="&#xE6E4;";
$num4="&#xE6E5;";
$num5="&#xE6E6;";
$num6="&#xE6E7;";
$num7="&#xE6E8;";
$num8="&#xE6E9;";
$num9="&#xE6EA;";
$num0="&#xE6EB;";
$numsharp="&#xE6E0;";
}
else {
//PC
$num1="[1]";
$num2="[2]";
$num3="[3]";
$num4="[4]";
$num5="[5]";
$num6="[6]";
$num7="[7]";
$num8="[8]";
$num9="[9]";
$num0="[0]";
$numsharp="[#]";
}
?>

絵文字を表示する場所に以下を記載(例:数字の0の絵文字)

<?php print $num0; ?><a href="http://www.hoshiya.biz/" accesskey="0">トップページへ</a>

 

参考サイト

携帯サイトのaccesskeyの数字画像を表示させるには
http://hoge.secret.jp/blog/2008/05/29/%E6%90%BA%E5%B8%AF%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AEaccesskey%E3%81%AE%E6%95%B0%E5%AD%97%E7%94%BB%E5%83%8F%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%95%E3%81%9B%E3%82%8B%E3%81%AB%E3%81%AF/

携帯の文字コードと絵文字の基礎知識|Mobile/Encoding - CodeRepos::Share - Trac
http://coderepos.org/share/wiki/Mobile/Encoding

トラックバック(0)

トラックバックURL:


モバイルサイト作成のための携帯電話会社各社の絵文字コード一覧サイトをまとめました。

ドコモ(docomo)
※イーモバイルはドコモと共通で使えるようです。
基本http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/basic/index.html
拡張http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/extention/

au by KDDI
http://www.au.kddi.com/ezfactory/tec/spec/pdf/typeD.pdf

ソフトバンク(softbank)
http://creation.mb.softbank.jp/web/web_pic_about.html

ウィルコム(willcom)
http://www.willcom-inc.com/ja/service/contents_service/create/emoji/index.html

トラックバック(0)

トラックバックURL:


ブログを更新して、RSSも更新されているが、

Google AJAX Feed APIで読み込んだフィードが更新されていないということが多々あります。

 

それは、

Googleのキャッシュにあるフィードを読み込んでいるからだそうです。

 

キャッシュをクリアまたはリセットする方法があるのかもしれませんが、

リアルタイムに最新の記事一覧を表示する方法は

読み込むフィードのURLにユニークな値を付加させることで

毎回最新の一覧を表示できるようになります。

今回はユニークな値として現在日時をURLに付加させてみました。

 

<script type="text/javascript" src="http://www.google.com/jsapi?key=●●あなたのAPIキー●●"></script>

<script type="text/javascript">

google.load("feeds", "1");


function initialize()
{


// 現在の日付と時間を取得
var date = new Date();
var year = date.getYear();
var mon = date.getMonth() + 1;
var day = date.getDate();
var hour = date.getHours();
var min = date.getMinutes();
var sec = date.getSeconds();

var query = year + mon + day + hour + min + sec;

//現在の最新RSSフィードの取得
var feed = new google.feeds.Feed("http://example.com/blog/rss20.xml?"+ query );

//取得するフィード数
feed.setNumEntries(6)

//実際に読む込む
feed.load(function(result)
{

//読み込めたか判別
if (!result.error)
{
//表示部分を選択
var container = document.getElementById("feed");

//変数の初期化
var list = "";

//Feedの処理
list = '<ul>';
for (var i = 0; i < result.feed.entries.length; i++)
{
//Feedを一つ抽出
var entry = result.feed.entries[i];
if(entry.title.match(/^PR:/)) {
//「PR:」から始まるものがあれば何もしない
}
else{
list += '<li>';
list += '<a href="' + entry.link + '" target="_blank" title="' + entry.title + '">' + entry.title + '</a>';
var strdate = createDateString(entry.publishedDate);
list += '&nbsp;(' + strdate + ')';
list += '</li>';
}
}
list += '</ul>';
container.innerHTML = list;
}
});
}

//日付の表示方法を変更
function createDateString(publishedDate)
{
var pdate = new Date(publishedDate);
var pday = pdate.getDate();
var pmonth = pdate.getMonth() + 1;
var pyear = pdate.getFullYear();
var phour = pdate.getHours();
var pminute = pdate.getMinutes();
var psecond = pdate.getSeconds();
//var strdate = pyear + "年" + pmonth + "月" + pday + "日" + phour + "時" + pminute + "分" + psecond + "秒";
var strdate = pyear + "-" + pmonth + "-" + pday ;
return strdate;
}

google.setOnLoadCallback(initialize);

</script>

<div id="feed">Loading...</div>

 

ちょっと難点なのは、

毎回フィードの読み込みを行うので、表示がもたつきます。

なので、

1時間ごとくらいにするために「分」のminと「秒」のsecは省いた方がいいかもしれません。

 

 

参考ページ

トラックバック(0)

トラックバックURL:


Javascriptで宅急便各社の荷物追跡サービスの検索結果を表示するフォームを作ってみた

  1. 検索窓に伝票番号(お問い合せ番号)を入力
  2. 宅急便会社を選択
  3. ボタンを押す
  4. 新規ウィンドウに検索結果が表示される

というフォームをJavascriptを使用して作ってみた。

 

よく使うのは

  • クロネコヤマト
  • 佐川急便
  • エクスパック

なので、この3つを検索できるようにしてみました。

nimotsu.html(http://hoshiya.biz/nimotsu_search/nimotsu.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>荷物追跡</title>
</head>
<body>
<script type="text/javascript">
<!--

function data_in(){

 //フォームデータ入力用変数
    var denpyou;
    var kaisha;
 var url;
 url = new Array();
 //クロネコヤマト
 url[1] = "http://jizen.kuronekoyamato.co.jp/jizen/servlet/crjz.b.NQ0010?id=";
 //佐川急便
 url[2] = "http://k2k.sagawa-exp.co.jp/p/web/okurijosearch.do?okurijoNo=";
 //日本郵便(ゆうパック・EXPACK・ポスパケット)
 url[3] = "http://tracking.post.japanpost.jp/service/singleSearch.do?org.apache.struts.taglib.html.TOKEN=&searchKind=S002&locale=ja&SVID=&reqCodeNo1=";


    //フォームデータを受け取る
    if(document.form1.denpyou.value==""){
  alert("伝票番号が入力されていません。");
  }
 else{
  denpyou=document.form1.denpyou.value;  
 
  //ラジオボタンの値を受け取る 
  for (i=0;i<document.form1.kaisha.length;i++){
    if (document.form1.kaisha[i].checked)
        kaisha = document.form1.kaisha[i].value;
      }
      
  url = url[kaisha];
 
  //新しいウィンドウで検索結果を表示
  window.open(url+denpyou);
  }

}


/* 半角数字チェック */
function TextCheck() {
   var str = document.form1.denpyou.value;
   if( str.match( /[^0-9.-]+/ ) ) {
      alert("半角数字、半角ハイフンで入力して下さい。");
      return 1;
   }
   return 0;
}

-->

</script>
<form id="form1" name="form1" method="post" action="">
  <br />
  <label for="denpyou">伝票番号
  <input name="denpyou" type="text" id="denpyou" value="" onblur="TextCheck();" />
  </label>
  (半角数字、半角ハイフン) <br />
  <label for="kaisha">会社選択
  <input name="kaisha" type="radio" id="kaisha" value="1" checked />
  ヤマト運輸
  <input name="kaisha" type="radio" id="kaisha" value="2" />
  佐川急便
  <input name="kaisha" type="radio" id="kaisha" value="3" />
  ゆうパック・EXPACK</label>
  <br />
  <input name="button" type="button" id="button" value="検索結果ページを開く" onClick="data_in();" />
</form>
</body>
</html>


 

実際のフォーム↓↓


(半角数字、半角ハイフン)

 

 

PHP版は以下をご参照ください。

PHPで荷物追跡サービスの検索フォームを作ってみる。
http://hoshiya.biz/2009/09/php-1.html

トラックバック(0)

トラックバックURL:


PHPで荷物追跡サービスの検索フォームを作ってみる。

宅急便会社の荷物追跡サービスを利用するために、

各会社のホームページを開いてから検索するのは面倒くさいので、

イントラネット等利用するため、

運送会社の選択と、伝票番号の入力で、

各会社の検索結果ページが表示されるようにフォームを作ってみた。

 

とりあえず、

ヤマト運輸、佐川急便、日本郵便(ゆうパック・エクスパック)

の検索をしてみる。

 

動作としては、

テキストエリアに伝票番号を入力し、

会社を選択して「検索」を押すと、

各会社の検索結果ページが表示が新規画面で表示されるという物です。

 

PHPのページ単体で検索ページを表示する場合

nimotsu.php

(テストページはこちら→http://hoshiya.biz/nimotsu_search/nimotsu.php

<?php
//エラー処理
$kaisha = (!isset($_POST['kaisha'])) ? null : $kaisha = $_POST['kaisha'];
$denpyou = (!isset($_POST['denpyou'])) ? null : $denpyou = $_POST['denpyou'];
$submit = (!isset($_POST['submit'])) ? null : $submit = $_POST['submit'];
//URL設定
//クロネコヤマト
$url['1'] = "http://jizen.kuronekoyamato.co.jp/jizen/servlet/crjz.b.NQ0010?id=".$denpyou;
//佐川急便
$url['2'] = "http://k2k.sagawa-exp.co.jp/p/web/okurijosearch.do?okurijoNo=".$denpyou;
//日本郵便 ゆうパック・EXPACK・ポスパケット
$url['3'] = "http://tracking.post.japanpost.jp/service/singleSearch.do?org.apache.struts.taglib.html.TOKEN=&searchKind=S002&locale=ja&SVID=&reqCodeNo1=".$denpyou;
//伝票番号が入力されていれば検索ページを表示
if (isset($denpyou)){
header("Location: ".$url["$kaisha"]);
}
else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>荷物追跡</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<br />
<input name="denpyou" type="text" id="denpyou" value="" />
<br />
<label for="kaisha">会社選択</label>
<br />
<input name="kaisha" type="radio" id="kaisha" value="1" checked />
ヤマト運輸<br />
<input name="kaisha" type="radio" id="kaisha" value="2" />
佐川急便<br />
<input name="kaisha" type="radio" id="kaisha" value="3" />
ゆうパック・EXPACK<br />
<input name="submit" type="submit" id="submit" value="検索" />
</form>
</body>
</html>
<?php
}
?>

 

HTMLフォームとPHPの検索ページ表示の2ファイルを使う場合

form.html

(テストページはこちら→http://hoshiya.biz/nimotsu_search/form.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>荷物追跡サービス検索</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="search.php" target="_blank">
<label for="denpyou">伝票番号</label>
<br />
<input name="denpyou" type="text" id="denpyou" />
<br />
<label for="kaisha">会社選択</label>
<br />
<input name="kaisha" type="radio" id="kaisha" value="1" checked />
ヤマト運輸<br />
<input name="kaisha" type="radio" id="kaisha" value="2" />
佐川急便<br />
<input name="kaisha" type="radio" id="kaisha" value="3" />
ゆうパック・EXPACK<br />
<input name="submit" type="submit" id="submit" value="検索" />
</form>
</body>
</html>

 

search.php

<?php
//エラー処理
$kaisha = (!isset($_POST['kaisha'])) ? null : $kaisha = $_POST['kaisha'];
$denpyou = (!isset($_POST['denpyou'])) ? null : $denpyou = $_POST['denpyou'];
$submit = (!isset($_POST['submit'])) ? null : $submit = $_POST['submit'];
//URL設定
$url['1'] = "http://jizen.kuronekoyamato.co.jp/jizen/servlet/crjz.b.NQ0010?id=".$denpyou;
$url['2'] = "http://k2k.sagawa-exp.co.jp/p/web/okurijosearch.do?okurijoNo=".$denpyou;
$url['3'] = "http://tracking.post.japanpost.jp/service/singleSearch.do?org.apache.struts.taglib.html.TOKEN=&searchKind=S002&locale=ja&SVID=&reqCodeNo1=".$denpyou;

if (empty($denpyou)){
echo "Error! is empty denpyou number";
}
else {
header("Location: ".$url["$kaisha"]);
}
?>

 

ちなみにテスト





ヤマト運輸
佐川急便
ゆうパック・EXPACK

 

改造の余地はあるもののとりあえずは使える。

 

 

↓Javascript版は以下をご参照ください。

トラックバック(0)

トラックバックURL:


Yahoo!検索 スタッフブログ
日々成長を続けるYahoo!検索。その戦略、サービスの詳細、Tipsなどを開発の現場から発信。
http://searchblog.yahoo.co.jp/
Yahoo!検索 スタッフブログ

 

Google Japan Blog
日々成長を続けるYahoo!検索。その戦略、サービスの詳細、Tipsなどを開発の現場から発信。
http://googlejapan.blogspot.com/
Google Japan Blog

 

日々是検索
検索窓からこんにちは! Microsoftの検索サービス・Bing(日本語読み:ビング)担当スタッフのブログです。タイトルと紹介文を編集する前に、[保存] をクリックして、デザインに対する変更内容を保存します。
http://searcheveryday.spaces.live.com/
日々是検索

トラックバック(0)

トラックバックURL:


会社で使用しているMovable Type version 4.1なのですが、

標準の検索窓に検索語を入れて検索ボタンを押すと

 

「検索結果の作成に失敗しました。」

 

と表示されます。

これを何とか解決したちところですが、

原因がわからないため、

いろいろ検索したところ有力情報が見つかりました。

 

MovableType3→4移行時のツボ~その1. 検索フォーム編 - 道具眼日誌:古田-私的記録
http://do-gugan.com/~furuta/archives/2008/02/movabletype341.html
MovableType3→4移行時のツボ~その1. 検索フォーム編 - 道具眼日誌:古田-私的記録

 

上記のページを見ると原因は

検索結果を表示するテンプレート「検索結果」に

インクルードされている以下のモジュールが見当たらず、

ちゃんとリンクしていないことが原因でした。

 

  • ヘッダー
  • ブログ記事の概要
  • フッター

 

会社のホームページ(ブログ)の場合

このモジュールがすべて名前の変更がされており、

削除されていること同然の状態になっておりました。

モジュール名を変更したところ正常に動作しました。

 

トラックバック(0)

トラックバックURL:


前回のページ「
Warning: Missing argument 2 for getTitleLink(), called in /home/sites/heteml/users158/m/h/0/mh0723/web/hoshiya.biz/blog/web/index.php on line 5108 and defined in /home/sites/heteml/users158/m/h/0/mh0723/web/hoshiya.biz/include/function/function.php on line 104
Google AJAX Feed APIを使ってアメーバブログの「PR:」を除く記事一覧を表示するJavascript|星屋工作室 hoshiya.biz 」で紹介したスクリプトを一部変更してみた。

 

変更の主な内容は、

表示するリストを作成する際に、HTMLタグを変数に入れるように改造しました。(赤文字部分)

前回はXMLの要素を操作してリストを作成するようにしていましたが、

XMLの操作は苦手なのでHTMLのソースを変数に格納するようにしました。

<script src="http://www.google.com/jsapi?key=●●あなたのAPIキー●●" type="text/javascript"></script>
<script type="text/javascript">
google.load("feeds", "1");  
function initialize()
{  
 //RSSフィードの取得
 var feed = new google.feeds.Feed("●●読み込みたいフィードのURL●●");  
 
 //取得するフィード数
 feed.setNumEntries(5)  
 
 //実際に読む込む
 feed.load(function(result)
 {  
  
  //読み込めたか判別
  if (!result.error)
  {
   //表示部分を選択
   var container = document.getElementById("feed");
   
   //変数の初期化
   var list = "";
   
   //Feedの処理
    list = '<ul>';
   for (var i = 0; i < result.feed.entries.length; i++)
   {  
    //Feedを一つ抽出
    var entry = result.feed.entries[i]; 
    if(entry.title.match(/^PR:/)) {
    //「PR:」から始まるものがあれば何もしない
    }
    else{
     list += '<li>';
     list += '<a href="' + entry.link + '" target="_blank">' + entry.title + '</a>';
     var strdate = createDateString(entry.publishedDate);
     list += '(' + strdate + ')';
     list += '</li>';

    }
        }
     list += '</ul>';
     container.innerHTML = list;

     }  
   });  
}
//日付の表示方法を変更
function createDateString(publishedDate){
  var pdate = new Date(publishedDate);
  var pday = pdate.getDate();
  var pmonth = pdate.getMonth() + 1;
  var pyear = pdate.getFullYear();
  var phour = pdate.getHours();
  var pminute = pdate.getMinutes();
  var psecond = pdate.getSeconds(); 
  //var strdate = pyear + "年" + pmonth + "月" + pday + "日" + phour + "時" + pminute + "分" + psecond + "秒";
  var strdate = pyear + "-" + pmonth + "-" + pday ;
  return strdate;
}
google.setOnLoadCallback(initialize); 
</script>
<!--表示結果表示する部分-->
<hr size="1" />
<div id="feed"></div>
<hr size="1" />
<!--表示結果表示する部分--> 

 

↓↓実際にうちの社長のアメブロのフィードを読み込んで表示した例↓↓



 

前回同様に

RSSに「PR:」が含まれていなければ新着5件を表示しますが、

新着5件中1件に「PR:」が含まれていた場合は

フィード自体から削除して消すのではなく、省略というか、スキップしているだけなので

表示が4件になります。

この辺りは改善が必要ですが、また今度にします。

 

参考にしたサイト

 

2009/09/23追記

上記を更に改造↓

トラックバック(0)

トラックバックURL:


不動産会社に勤務している訳ですが、

中古住宅やマンション、売り土地の販売に

Google Mapsが使用できないかなと調べていますが、出来そうにない。

 

地図はGoogle Maps APIを利用すればできる訳ですが、

規約に違反しそうな感じです。

 

・地図に誰でもアクセスできること

・地図そのものを無償で提供すること

と、あるページを見ました。

あるページ↓

Googleヘルプグループ
http://groups.google.co.jp/group/Google-Maps-JP-For-Business-Owners/browse_thread/thread/1a3cac9a78bb6713

 

そもそも、イントラネットなので、誰でも地図にアクセスできない。

この時点でアウト。

 

なぜ、イントラネットで利用したいか?ですが、

他社物件等を無断で公開出来ないなからです。

商談での社内利用で有れば問題ないので、

イントラネットで地図の利用ができればな~と思った訳なんです。

 

お金を払っても使用できないの?

と思い探したところ。ありました。

『Google Maps API Premier』日本でも提供開始、イントラネット内利用も | ネット | マイコミジャーナル
http://journal.mycom.co.jp/news/2009/05/18/018/index.html

 

きっと高いんだろうな~

 

Google Maps API Premier
http://www.google.co.jp/intl/ja/enterprise/maps/index.html

 

yahoo!地図もイントラネット利用はできないようです。

Yahoo!デベロッパーネットワーク - 地図
地図Web APIの利用方法
http://developer.yahoo.co.jp/webapi/map/

トラックバック(0)

トラックバックURL:


 

http://chart.apis.google.com/chart?cht=qr&choe=UTF8&chld=l|0&chs=140x140&chl=http://karitaikun.com

のように chl の後ろに指定した文字列をQRコードにしてくれる優れものです。

 

ちなみに上記のURL(http://karitaikun.com)のQRコードを表示すると

となる。

 

使い方を簡単に説明すると、

 

http://chart.apis.google.com/chart?

 

の後ろにいろいろパラメータを入れていきます。

 

Google Chart API での使用したいチャートの種類を指定(必須)

例:cht=qr

今回はQRコードでしようするため「qr」を指定していますが、

その他グラフや地図などのチャートを指定できるようです。

 

出力する文字エンコードを指定(省略可)

例:choe=UTF8

書式:chl=<text to encode>

値:UTF-8、Shift_Jis 他

省略したときはUTF-8がデフォルト

 

表示するQRコードのEC(回復)レベルとマージン(余白)の指定(省略可)

例:chld=l|0 または chld=l%7C0

書式:chld=<ec level>|<margin>

<ec level>の値: l,m,q,h (回復できるレベル L=7%,M=15%,Q=25%,H=30%)

<margin>の値:任意の数字を入れる。

 

出力するQRコードのサイズを指定(必須)

例:chs=140x140

値:適当

 

QRコード化したい文字列やURL(必須)

例:chl=http://karitaikun.com

 

詳細については英語のページですが、

http://code.google.com/apis/chart/types.html#qrcodes

をご参照ください。

 

携帯電話でQRコードを読み込ませると文字化けしてうまく認識されない場合や、

ブラウザにURLを送信してもページが表示できずエラーになる場合は

URLエンコードされたURL内の文字列の中にある「%」を「%25」に置き換えることで回避できます。

例:

「星屋」をURLエンコードすると

「%e6%98%9f%e5%b1%8b」

となるので

http://chart.apis.google.com/chart?cht=qr&choe=UTF8&chld=l|0&chs=140x140&chl=%e6%98%9f%e5%b1%8b

とするところですが、携帯電話で読み取ると文字化けしてしまいますが、

「%」を「%25」に置き換えて

http://chart.apis.google.com/chart?cht=qr&choe=UTF8&chld=l|0&chs=140x140&chl=%25e6%2598%259f%25e5%25b1%258b

とします。

これを携帯電話で読み込むと「%e6%98%9f%e5%b1%8b」と認識されます。

 

ファイルメーカーをご利用の方で、

QRコードを表示するURLをブラウザに送る場合は

Substitute ( GetAsURLEncoded (URL) ; "%" ; "%25" )

でURLエンコードされたURLフィールド内の「%」を「%25」に置き換えるとうまくいきます。

トラックバック(0)

トラックバックURL:


指定のURLのサムネイルをリアルタイムに表示するツール。

以下のタグを例に「?」以降にURLを指定してやるだけ!

こんなツール待ってました。

 

 

サムネイルの表示の方法もいくつかあるようです。

説明のページ↓

上記ページの内容を参照

 

更に詳細設定も可能。

http://mozshot.nemui.org/shot?uri=http%3A%2F%2Fwww.mozilla.org%2F;noresize=true;win_x=1000;win_y=1000;effect=false;keepratio=true

  • uri
  •  対象のURL
  • noresize
  • win_x
  • win_y
  • effect
  •  影の有無 true:あり false:なし
  • keepratio

トラックバック(0)

トラックバックURL:


Movable Type Pro BiND for WebLiFE *組み合わせた個人ブログサイトに挑戦。

挫折せずに合体できるだろうか...。

 

 

Movable Type Pro
Movable Type Pro

 

 BiND for WebLiFE *
BiND for WebLiFE *

トラックバック(0)

トラックバックURL: