●Internet Scripting
●下記をProfessional DTPに掲載した記事です(PDF版-Acrobat3.0Jが必要です)
テーマ:ダイヤルアップ接続したマックをホストにしたい!
-----------------------------------------------------
これがやりたいんだなぁー。そのために,してきたこと,できそうなこと等,ここで報告したいと思います。
・ダイヤルアップ接続したマックをホストにするために
専用線でつながってなくても,自分のマックをホストにすることは可能です。接続すれば,IPアドレスが割り当てられますので,そのアドレスを他の人に伝え,そこに接続できるようにすればいいのです。しかし,IPアドレスは,接続するたびに変わるから,それをどう伝えるかが問題になります。手順を考えてみましょう。
・準備
ホームページを開設できるインターネット接続プロバイダーと契約をしましょう。
料金は従量制ではなくて,定額制にします。
NTTのテレホーダイに契約しましょう。
つまり,夜11時から朝8時までつなぎっぱなしにして,その間ホストを開設します。つまり,時間限定ホストとなります。
ホームページを作っておきましょう。その中に,ここをクリックすると,私のホストへ接続できますよ! のリンクを埋め込んでおきましょう。
(このホットテキストを毎日書き換えることになります。)
・スクリプトの手順
1) 毎日午後11時に起動する
2) PPPと自動接続する
3) IPアドレスを取得する
4) ホームページのhtmlのホットテキストを3)で取得したアドレスに書き換える
5) 書き換えたhtmlをFetchでアップロードする (完了!)
6) 翌朝8時に終了する
1,6は時間監視をすれば大丈夫。4は,スクリプタブルなエディタを用いれば大丈夫。5は,Fetchがバージョン3.0でAppleScript対応したので問題ないでしょう。となると,課題は2と3です。
・PPPの自動接続
PPPをスクリプタブルにするには,Freewareで MacPPP Control 1.4 があります。この中のadditionを,機能拡張フォルダの,スクリプト機能追加にいれると,PPPのオン・オフ,接続しているか否かがわかるようになります。でも...
・その問題点
FreePPP2.5を使用している方は多いでしょう。また,OpenTransportも安定してきたので,これも使用している方が多いでしょう。
しかし,FreePPPは1回で接続できた時はいいのですが,2回目以降は上手く接続できない場合があります。また,68KマックでFreePPP2.5とOpenTransportの相性が悪いです。使用するとIMで不具合が発生します(私の個人使用しているのは
Color Classic2 なのです!)。
ということから,自動接続にFreePPPを使用しない! ことにしました。
・その解決方法
では,FreePPPを使用しないとなると...,良いタイミングですが,96年11月にOpenTransport対応かつスクリプタブルなPPPがAppleから提供されました。Open Transport/PPPといいます。ただし,動作条件がOpenTransport1.1以上です。7.5.3や7.5.5でバージョンアップしても,OpenTransportは1.1のはずです。アップデータで1.1.1にする必要があります(ちなみに,最新のバージョンは1.1.2になっています)。
Open Transport/PPPを使用してから,接続でRetryになることが非常に少なくなりました。
・IPアドレスの取得
Open Transport/PPPで接続すると,IPアドレスが表示されるのですが,これは接続先アドレスなのです。それではどうしましょう...。これについても,additionで解決できました。TCP/IP Scripting Additionです。シェアウェアです。get
tcp my address とするとIPアドレスが取得可能です。これ以外にも数多くの機能があるのですが,私,よくわかりませんでした(誰か教えてください)。これは,次のwww
siteから取得できます。http://www.mangotree.com/tcpscripadd.html 。
さて,これで『ダイヤルアップ接続したマックをホストにしたい!』は可能になります。実験用の1)から6)のスクリプトは作成してあるのですが,統合していません。時期をみて,ここに再リポートしたいと思います。ではまたお会いしましょう。
97/04/01 wrote begin
猛烈に忙しかった年度末でした。やっと解放され,ここのメンテナンスにも時間がさけそうです。では,その後のレポートです。
・IPアドレスの取得2
フリーウェアで NetEvents
というのがありまして,それが,TCP/IP Scripting Additionと同様のことをしてくれます。v1.06が最新でこれを利用しないといけないのですが,これにはサンプルスクリプトが同梱されていません。これを取得するには前バージョンのv1.04をdownしないといけません。
既にお気づきの方もおられると思いますが,Welcome to My Macintoshの運用試験を始めます。これには下記のようなスクリプトを使用して,自動書き換えを行っています。このスクリプトの安定性を見極めるのが試験期間の目的です。
なお,私の通信環境は,ISDN,TAはMN128,OpenTransport1.1.2,PPPはOpen Transport/PPP,Sysytem7.5.5 + JLK1.2 です
・PPP自動接続のスクリプト
-------------------------------------------------------------------------
set username to "N------b"
set password to "xxxxxxxx"
set telephone to "0423-xx-xxxx4"
-------------------------------------------------------------------------
repeat until ((state of (PPP status)) is "connected")
try
PPP connect address telephone user name (username) password (|password|)
my timeCount(5)
on error
my timeCount(5)
end try
end repeat
-------------------------------------------------------------------------
on timeCount(s)
set intervalSecond to s
set date0 to current date
repeat while ((current date) - date0) < intervalSecond
end repeat
end timeCount
-------------------------------------------------------------------------
補足 変数username,passwordは,接続プロバイダーからのアカウントとパスワードです。
変数telephoneは,接続ポイントの電話番号です。サブルーチン timeCountは,その数字秒間,なにもしないで,ループさせているだけです。これで,busy時でも5秒後にはリダイアルします。
・IPアドレス取得のスクリプト
(1)NetEventsを使用した場合
-------------------------------------------------------------------------
tell application "NetEvents 1.0b6"
activate
set new_ad_txt to AddrToName (MyIPAddress)
quit
end tell
-------------------------------------------------------------------------
(2)TCP/IP Scripting Additionを使用した場合
-------------------------------------------------------------------------
set new_ad_txt to tcp address to name (tcp my address)
-------------------------------------------------------------------------
補足 1,2とも,変数new_ad_txtにIPアドレスの名称が入ります
・htmlファイルの書き換え
-------------------------------------------------------------------------
tell application "Scriptable Editor"
activate
open alias "VegaHD:/x/sunrise/:welcome.html"
tell document 1
tell paragraph 29
cut
make paragraph with data new_ad_txt
end tell
save in file "VegaHD:/x/sunrise/:welcome.html" as text
close saving no
end tell
quit
end tell
-------------------------------------------------------------------------
補足 "Scriptable Editor"とは「スクリプティング対応エディタ」のことです。AppleScriptのあるフォルダに入っているはずですが,滅多に使わないから削除してしまっている方も多いでしょう。特にこれでなくてもスクリプタブルなエディタならば大丈夫だと思います。
ここでは,ハードディスク"VegaHD"の中のフォルダ"/x/sunrise/"の中に書き換えるhtml書類,"welcome.html"があります。これの29行目を,先に取得した変数new_ad_txtに置き換えるわけです。ちなみに,welcome.htmlの29行目の前後は下記のようになっています。
<P ALIGN=CENTER><A HREF="http://
p3ngym068.highway.or.jp
"><I><FONT
SIZE=+2>Go to My Macintosh</FONT></I></A></P>
赤字の部分が毎回書き換えられて,ホットテキストになるわけです。
・Fetchによるアップロード
(1)ショートカットウインドウを用いない方法
-------------------------------------------------------------------------
set DestUrl to "ftp://NA999999:********@www.age.ne.jp/"
set doc to alias "VegaHD:/x/sunrise/:welcome.html"
with timeout of 600 seconds
tell application "Fetch 3.0.1"
activate
put into url DestUrl item doc
quit
end tell
end timeout
-------------------------------------------------------------------------
補足 NA999999はftpに入るためのアカウント,********はそのパスワードです
(2)ショートカットウインドウを用いる方法
-------------------------------------------------------------------------
tell application "Fetch 3.0.1"
with timeout of 600 seconds
tell shortcut window 1
open bookmark "NetAge"
end tell
tell transfer window 1
put into item alias "VegaHD:/x/sunrise/:welcome.html"
end tell
end timeout
end tell
-------------------------------------------------------------------------
補足 ここでは,ショートカットウインドウに当然ながらアカウント,パスワードが入っていることが前提です。
1,2は,Fetchオープン時ショートカットウインドウが開く設定になっているか否かで,どちらかを使い分けることになります。
これで,『ダイヤルアップ接続したマックをホストにしたい!』が現実になります。4月中旬よりテレホーダイを利用して試験に入ります。
また,このスクリプトも近々ライブラリに登録する予定です。お楽しみに!
97/04/01 wrote -end
97/04/08 wrote begin
・サーバーソフトウェア
ここまできたら,あとはサーバーを立ちあげるだけです。では,どんなのがよいでしょうか? 試してきたものの,独断的な感想を述べたいと思います。
(1) Personal Web Sharing (Apple)
今後,標準搭載されるだろうパーソナルサーバ。現在はβ8。アプリケーションなのだが,機能拡張とコントロールパネルにいれなくてはいけない。起動項目にアリアスが自動的に入ってしまう。まだ,βのためか,すっきりしないアクションがある。
(2) Personal Web Server (MicroSoft)
これも,機能拡張とコントロールパネルにいれるもの。しかし,簡単にホームページができる配慮がなされている。手軽さでは一番と思った。しかしながら,Personal
Web Sharing (Apple)とともに,アプリケーションではないので,AppleScriptで制御ができない。残念ながら,これらは,サーバーとして見送った。
(3) NetPresents4.1 (Peterlewis)
アプリケーションだが,設定が難しい。AppleScript未対応のため,これもサーバーとして見送る。
(4) Pictorius Net Servers
アプリケーションだが,シェアウェア。設定もやや難しい。しかしそのぶん高機能。しかしAppleScript未対応のため,これもサーバーとして見送る。
(5) MacHTTP2.2.2
アプリケーションで,しかもフリーウェア。操作も簡単! AppleScriptにも対応しているし,いろんな資料もそろっている(つまり多くの人たちが使用している)ので最適と思う。
(6) WebStar 2.0
これは,試していません。だって,製品だし,高価です。PersonalWebStarを期待していたのですが,残念ながら開発中断したようです。
(7) Quid Pro Quo 1.0
アプリケーションで,しかもフリーウェア。AppleScriptにも対応している。基本的にMacHTTPの後発ライバルという感じです。操作も簡単です。ただ,起動するだけです。後発の強みで,MacHTTPより操作性はよくなっていると思います。一応,私のサーバーはこれで運用していきたいと思っています。
97/04/08 wrote -end
97/08/30 wrote -begin
現在稼働中のスクリプトは以下のようなものです
global date1, strtTime, endTime
set username to "xxxxxxxx"
set password to "pppppppp"
set telephone to "0123-45-6789"
set NEW_AD_TXT to ""
set strtTime to 22 * hours + 59 * minutes
set endTime to 7 * hours + 50 * minutes
-------------------------------------------------------------------------
repeat until ((state of (PPP status)) is "connected") and (NEW_AD_TXT
is not "")
try
PPP connect address telephone user name (username) password (|password|)
my timeCount(3)
tell application "NetEvents 1.0b6"
activate
set NEW_AD_TXT to AddrToName (MyIPAddress)
quit
end tell
on error errmsg number errnum
if (state of (PPP status)) is "connected" then
try
tell application "NetEvents 1.0b6" to quit
PPP disconnect
on error
end try
end if
my timeCount(3)
end try
end repeat
-------------------------------------------------------------------------
tell application "Scriptable Text Editor"
open alias "VegaHD:/x/sunrise/:index.html"
tell document 1
tell paragraph 77
cut
make paragraph with data "red_arrow.gif"
end tell
tell paragraph 80
cut
make paragraph with data NEW_AD_TXT
end tell
tell paragraph 83
cut
make paragraph with data "現在アクセスOK,翌朝07:50まで!"
end tell
save in file "VegaHD:/x/sunrise/:index.html" as text
close saving no
end tell
quit
end tell
-------------------------------------------------------------------------
tell application "Quid Pro Quo" to activate
-------------------------------------------------------------------------
set gDesturl to "ftp://AAAAAAAA:QQQQQQQQ@www.age.ne.jp/"
set doc to alias "VegaHD:/x/sunrise/:index.html"
with timeout of 6000 seconds
set SS to "No"
repeat until SS = "OK"
try
tell application "Fetch 3.0.3"
activate
put into url gDesturl item doc
quit
end tell
set SS to "OK"
on error
tell application "Fetch 3.0.3" to quit
set SS to "No"
end try
end repeat
end timeout
-------------------------------------------------------------------------
tell application "Netscape Navigatorェ 2.02"
activate
repeat
OpenURL "http://" & NEW_AD_TXT toWindow 2 flags 1
my timeCount(600)
if (endTime < date1) and (date1 < strtTime) then exit repeat
end repeat
quit
end tell
-------------------------------------------------------------------------
tell application "Quid Pro Quo" to quit
-------------------------------------------------------------------------
tell application "Scriptable Text Editor"
open alias "VegaHD:/x/sunrise/:index.html"
tell document 1
tell paragraph 77
cut
make paragraph with data "black_arrow.gif"
end tell
tell paragraph 80
cut
make paragraph with data "home.age.or.jp/x/sunrise/sorry.html"
end tell
tell paragraph 83
cut
make paragraph with data "現在アクセス不可,23:10まで待て!"
end tell
save in file "VegaHD:/x/sunrise/:index.html" as text
close saving no
end tell
quit
end tell
-------------------------------------------------------------------------
set gDesturl to "ftp://AAAAAAAA:QQQQQQQQ@www.age.ne.jp/"
set doc to alias "VegaHD:/x/sunrise/:index.html"
with timeout of 6000 seconds
set SS to "No"
repeat until SS = "OK"
try
tell application "Fetch 3.0.3"
activate
put into url gDesturl item doc
quit
end tell
set SS to "OK"
on error
tell application "Fetch 3.0.3" to quit
set SS to "No"
end try
end repeat
end timeout
-------------------------------------------------------------------------
repeat while ((state of (PPP status)) ュ "idle")
try
PPP disconnect
on error
end try
end repeat
-------------------------------------------------------------------------
on timeCount(s)
set intervalSecond to s
set date0 to current date
repeat while ((current date) - date0) < intervalSecond
set date1 to time of date ((current date) as text)
if (endTime < date1) and (date1 < strtTime) then exit repeat
end repeat
end timeCount
-------------------------------------------------------------------------
97/08/30 wrote -end