programing
2010年02月17日
twtrはrubyのgemを使ってインストール出来ます。
|
これで、自分のホーム下の以下のディレクトリにインストールされます。
|
シェルのパスが通っていなければ、.bashrcに以下を追加して、再読み込みします。
|
|
使い方は、上記twtrにあるとおりですが。 最初に、IDとPWと必要であればproxyを設定します。
|
以下のファイルに、設定が記録されます。
|
フォローしている人のタイムラインを表示します。
|
自分へのリプライを表示します。
|
tweetsを投稿します。
|
シンプルでよくできています。
URLがあった場合そこをクリックすれば、ubuntuのterminal画面ならOSの機能でブラウザが開きます。
ただ、tweet毎の区切りがわかりにくいので、ぼくはtweet毎に空行を入れるようにしました。
以下のファイルを編集します。
|
line 19(break文)と20(end文)の間に、put文を追加します。
|
これで、tweetの境がはっきりしました。
ftの機能だけなら、ぼくも前にrubyで自作したのですが・・・。 といっても、参照サイトのコードですが・・・。
- ブログネタ:
- Twitter(ツイッター)について に参加中!
2010年01月21日
twitterって、syslogdみたいなものだな、とふと思った。
いろいろ自動的にloggingするのに使えるので、最低限の投稿とタイムライン表示を、プログラムで使えるようにしたい。
そこで、twitterを、rubyスクリプトでいじってみよう!と思ったのだが、先人がいらっしゃったので、その知恵を借りることにした。
マイペースなプログラミング日記から、[Ruby]Twitter APIを使って投稿してみる の記事のスクリプトを利用させていただく。
usernameとpassword変数を、自分のものに書き換えて実行する。
このままだと、自分のタイムラインを20 tweet 表示する。
また、下ほうにある"# post tweet"の次の行の#を外すと、tweetの投稿になる。投稿内容を書き換えて実験してみてほしい。
いろいろ自動的にloggingするのに使えるので、最低限の投稿とタイムライン表示を、プログラムで使えるようにしたい。
そこで、twitterを、rubyスクリプトでいじってみよう!と思ったのだが、先人がいらっしゃったので、その知恵を借りることにした。
マイペースなプログラミング日記から、[Ruby]Twitter APIを使って投稿してみる の記事のスクリプトを利用させていただく。
usernameとpassword変数を、自分のものに書き換えて実行する。
このままだと、自分のタイムラインを20 tweet 表示する。
また、下ほうにある"# post tweet"の次の行の#を外すと、tweetの投稿になる。投稿内容を書き換えて実験してみてほしい。
twitter.rb |
|
- ブログネタ:
- Webアプリケーション に参加中!
2009年12月01日
FirewallやNAT装置が途中経路にある場合、そこをどのポート番号が通過できるかを知りたいことがある。
TCPやICMPは、比較的簡単にテストできるが、UDPは簡単な試験ツールがない。探せばきっとあるのだろうが、探し方が悪いのか、意外とみつからない。
なければ作ろうということで、rubyで作った。
受信用プログラム udprecv.rb |
|
送信用プログラム udpsend.rb |
|
使い方
(1)受信用プログラムを受信側サイトで起動。
引数に、UDPの待ち受けポート番号を指定する。
(2)送信用プログラムを起動。
引数に、宛先IPアドレスと宛先ポート番号を順に指定する。
注意点
●受信用プログラムで、well known port(1023番以下)を指定する場合は、root権限が必要です。
●受信プログラムは、パケットをひとつ受けとると終了します。
●テストで送信されるパケットは一つだけです。パケット紛失率の高いネットワークでは使い物になりません。(何度も送信してやってください)
2009年10月07日
googleのAPIを使って、rubyでweb検索をするプログラムを作ってみた。
rubyの勉強を兼ねているので、けして美しいコードではないが、(自分にとっての)わかりやすさを心がけている。
基本的な考え方は、以下のGoogle AJAX Search APIのデベロッパーガイド「Flash やその他 JavaScript を使用しない環境」にしたがっている。
AJAX Search APIを使う際は、AJAX API KEYをここから取得して、http headerに埋め込まないといけない。
javascriptからの呼び出しでも、埋め込むことが推奨されているが、
省略してもいいようだ。今回は埋め込んでいない。
AJAX APIにHTTPで検索queryを出すと、JSON形式で検索結果のテキストデータが返されてくる。
そこで、JSON形式のデータを簡単に扱えるように、JSON parse libraryとしてsimple-json.rbを使わせてもらった。
使い方は、このプログラムを起動するときに、引数に検索したい文字列を指定する。(複数可)
引数のbase64 encodeなどの考慮をしていないので、2 byteコードは検索ワードに指定できない。
JSONをparseした際、ハッシュと配列が組み合わさった形でruby objectに収納されるので、ハッシュにハッシュが入っているものにどうやってアクセスするのか、記述方法がわからずに苦労してしまった。
[ ]でくくった添字をつなげていけばいいのだった。
わかってみれば、なんてことない。
出力結果は、以下のとおり。検索ワードにCanonとEOSを指定している。
最後に出るestimatedResultCountは、おおよその検索結果件数であるはずなのだが、webで普通に検索したときの数とは大きな開きがある。
クラスリファレンスの「google.search.Search-プロパティ」に、この値の説明があるが、まぁ、そういうものらしい。
上記と同じ検索ワードcanon eosで、googleのホームページから検索すると、68,300,000件とでる。この程度の差なら問題ないが、webの値に比べてAPIの値が1割ほどの時もあった。
この違いは、なんなんでしょうねぇ。
rubyの勉強を兼ねているので、けして美しいコードではないが、(自分にとっての)わかりやすさを心がけている。
基本的な考え方は、以下のGoogle AJAX Search APIのデベロッパーガイド「Flash やその他 JavaScript を使用しない環境」にしたがっている。
AJAX Search APIを使う際は、AJAX API KEYをここから取得して、http headerに埋め込まないといけない。
javascriptからの呼び出しでも、埋め込むことが推奨されているが、
省略してもいいようだ。今回は埋め込んでいない。
AJAX APIにHTTPで検索queryを出すと、JSON形式で検索結果のテキストデータが返されてくる。
そこで、JSON形式のデータを簡単に扱えるように、JSON parse libraryとしてsimple-json.rbを使わせてもらった。
googlesearch.rb |
|
使い方は、このプログラムを起動するときに、引数に検索したい文字列を指定する。(複数可)
引数のbase64 encodeなどの考慮をしていないので、2 byteコードは検索ワードに指定できない。
|
JSONをparseした際、ハッシュと配列が組み合わさった形でruby objectに収納されるので、ハッシュにハッシュが入っているものにどうやってアクセスするのか、記述方法がわからずに苦労してしまった。
[ ]でくくった添字をつなげていけばいいのだった。
わかってみれば、なんてことない。
出力結果は、以下のとおり。検索ワードにCanonとEOSを指定している。
|
最後に出るestimatedResultCountは、おおよその検索結果件数であるはずなのだが、webで普通に検索したときの数とは大きな開きがある。
クラスリファレンスの「google.search.Search-プロパティ」に、この値の説明があるが、まぁ、そういうものらしい。
上記と同じ検索ワードcanon eosで、googleのホームページから検索すると、68,300,000件とでる。この程度の差なら問題ないが、webの値に比べてAPIの値が1割ほどの時もあった。
この違いは、なんなんでしょうねぇ。
- ブログネタ:
- Webアプリケーション に参加中!
2009年09月02日
これまで準備をすすめてきた、楽天ブログからlivedoorブログへの引っ越しが完了したので、まとめとして、以下に手順を記しておく。
これらは、ubuntu上での作業となる。
詳しい動作環境については、こちら。
1.楽天ブログのバックアップ
(1)backup_raku.rbのスクリプトを、作業マシンにコピペする。
(2)ここの説明をみて、backup_raku.rbに最初のURLや画像保存用ディレクトリなどについて設定する。このとき、画像リンクを修正するにしたほうが後が楽。
(3)backup_raku.rbの実行
(5)改行コードをCRLFからLFに修正。やりかたはこちら。
2.画像をlivedoorブログへアップロード
(1)atomupload.rbのスクリプトを、作業マシンへコピペする。
(2)ここの説明をみて、atomupload.rbを設定する。画像ディレクトリは、1-(2)で設定したものを入れる。
(3)atomupload.rbを実行。
(4)imglinksに、画像のファイル名とlivedoorでの画像URLの対応表ができあがる。
3.ブログ本文の画像リンクの修正 (★公開用スクリプトが未完成なので、後日アップします)
(1)rewritelink.rbのスクリプトを、作業マシンにコピペする。
(2)ここの説明をみて、rewritelink.rbを設定する。
(3)rewritelink.rbの実行。
4.MTファイルのインポート
livedoorブログの「ブログ設定」のページの下部に、引越しという機能があるので、そこをクリックすると、mtファイルのインポートができる。
最終的にできあがったmtfile.eucを指定して、読み込みが終わったら完了。
5.補足
画像ファイルのuploadは、けっこう時間がかかります。
また、原因不明ですが正常にアップロードできない画像がありました。
テキストencodeした文字列で、何か誤認識するケースがあるのかもしれません。
それらのファイルは、画像管理画面でみると、正常にサムネイルが作成されていないので、どれが失敗したかわかります。
手動でアップロードし直して、リンクを書き換えてください。
(ぼくのブログでは、失敗画像が放置されていますが・・・)
これらは、ubuntu上での作業となる。
詳しい動作環境については、こちら。
1.楽天ブログのバックアップ
(1)backup_raku.rbのスクリプトを、作業マシンにコピペする。
(2)ここの説明をみて、backup_raku.rbに最初のURLや画像保存用ディレクトリなどについて設定する。このとき、画像リンクを修正するにしたほうが後が楽。
(3)backup_raku.rbの実行
% ruby ./backup_raku.rb > mtfile
(4)mtfileに、ブログ本文、コメント、トラックバック等のテキスト情報が保存される。 また、(2)で指定した画像ディレクトリに、全ての画像ファイルが楽天ブログにおけるファイル名で保存される。(5)改行コードをCRLFからLFに修正。やりかたはこちら。
2.画像をlivedoorブログへアップロード
(1)atomupload.rbのスクリプトを、作業マシンへコピペする。
(2)ここの説明をみて、atomupload.rbを設定する。画像ディレクトリは、1-(2)で設定したものを入れる。
(3)atomupload.rbを実行。
% ruby atomupload.rb > imglinks
(4)imglinksに、画像のファイル名とlivedoorでの画像URLの対応表ができあがる。
3.ブログ本文の画像リンクの修正 (★公開用スクリプトが未完成なので、後日アップします)
(1)rewritelink.rbのスクリプトを、作業マシンにコピペする。
(2)ここの説明をみて、rewritelink.rbを設定する。
(3)rewritelink.rbの実行。
% ruby ./rewriteklink.rb > mtfile.livedoor
(4)漢字コードをUTF-8からEUCに変更。% nkf -e mtfile.livedoor > mtfile.euc
4.MTファイルのインポート
livedoorブログの「ブログ設定」のページの下部に、引越しという機能があるので、そこをクリックすると、mtファイルのインポートができる。
最終的にできあがったmtfile.eucを指定して、読み込みが終わったら完了。
5.補足
画像ファイルのuploadは、けっこう時間がかかります。
また、原因不明ですが正常にアップロードできない画像がありました。
テキストencodeした文字列で、何か誤認識するケースがあるのかもしれません。
それらのファイルは、画像管理画面でみると、正常にサムネイルが作成されていないので、どれが失敗したかわかります。
手動でアップロードし直して、リンクを書き換えてください。
(ぼくのブログでは、失敗画像が放置されていますが・・・)
- ブログネタ:
- ブログカスタマイズ2005 に参加中!
rubyのハッシュ配列を使って、全表示しようと思ったら、どうもおかしい。
|
awkっぽくeachで配列要素を取り出せると思ったら。
|
と、こうなる。 正しくは、each_keyメソッドを使うのだ。
|
2009年08月27日
#!/bin/ruby
#
# Image File Uploader for Livedoor blog
# 2008-08-27 Yasuki
#
require 'net/http'
require 'time'
require 'digest/sha1'
require 'uri'
require 'kconv'
#
# 初期設定
username="aaaaaaaaaa"
password="xxxxxxxxxx"
blogId="9999999"
targetDirectory="images"
fileSerfix="jpeg"
#------------------------------------
endPoint="http://cms.blog.livedoor.com/atom/blog_id="+blogId+"/svc=upload"
ep=URI.parse(endPoint)
# WSSE認証ヘッダの作成
nonce = ''
while nonce.size < 20
nonce << rand(256)
end
created = Time.new.utc.iso8601.to_s
digest = [Digest::SHA1.digest(nonce+created+password)].pack('m').gsub("\n",'')
wsse = [
%!UsernameToken Username="#{username}", !,
%!PasswordDigest="#{digest}", !,
%!Nonce=#{[nonce].pack('m').gsub("\n",'')}, !,
%!Created="#{created}"!].join('')
# 投稿する画像ファイルの数だけループ
Dir::glob(targetDirectory+"/*."+fileSerfix).each do |filename|
f = open(filename,"rb")
# 画像ファイルをBase64エンコード
base64_text = [f.read].pack('m')
f.close
# HTTPコネクションを作成
Net::HTTP.start(ep.host, ep.port) do |http|
#リクエストインスタンス生成
request = Net::HTTP::Post.new(ep.path)
#HTTPヘッダー作成
request["X-WSSE"] = wsse
#HTTPボディの作成
xmlBody=""
xmlBody.concat("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
xmlBody.concat("<entry xmlns=\"http://purl.org/atom/ns#\">")
xmlBody.concat("<title xmlns=\"http://purl.org/atom/ns#\">")
xmlBody.concat(filename)
xmlBody.concat("</title>")
xmlBody.concat("<content xmlns=\"http://purl.org/atom/ns#\" mode=\"base64\" type=\"image/jpeg\">")
xmlBody.concat(base64_text)
xmlBody.concat("</content></entry>")
request.body=xmlBody
# 送信
response = ''
response = http.request(request)
# レスポンスの表示
printf("Response:%s\n",Kconv.kconv(response.body,Kconv::UTF8))
end
end
Livedoorブログに、Atomを使って、指定ディレクトリ内の全画像ファイルを投稿するrubyでのアップローダーを作りました。
ソースはこちらです。
初期設定の項に、以下の項目を指定してください。
画像タイトルが元のファイル名になります。
レスポンスは標準出力にそのまま出ますので、それを加工することで、元ファイルとアップロード後のURLを関連付けることができます。
WSSE認証のヘッダ作成は、以下のサイトのソースを使わせていただきました。
WebOS Goodies
また、Net::HTTPの使い方は、以下のサイトがとても参考になりました。
備忘録
ありがとうございます。
ソースはこちらです。
初期設定の項に、以下の項目を指定してください。
- Livedoor ID
- パスワード
- Blog ID
- アップロードする画像があるディレクトリ
- 拡張子(jpegもしくはjpg)
画像タイトルが元のファイル名になります。
レスポンスは標準出力にそのまま出ますので、それを加工することで、元ファイルとアップロード後のURLを関連付けることができます。
WSSE認証のヘッダ作成は、以下のサイトのソースを使わせていただきました。
WebOS Goodies
また、Net::HTTPの使い方は、以下のサイトがとても参考になりました。
備忘録
ありがとうございます。
2009年08月26日
backup_raku.rbの実行結果として、MT形式のブログエントリが生成されます。
その出力例を以下に示します。
行末に^Mがついているのが、なんともカッコワルイですが、直し方わかんないんです・・・。
その出力例を以下に示します。
行末に^Mがついているのが、なんともカッコワルイですが、直し方わかんないんです・・・。
#!/usr/bin/ruby
######################################
#
# Backup of Rakuten Blog
#
# 2009/08/19 Yasuki
#
######################################
# targetUrlは、本プログラムが最初に取得するブログエントリ
# です。このURLを起点として、「次へ>>」というリンクをたどり、
# 最後までブログエントリを自動で取得します。
targetUrl="http://plaza.rakuten.co.jp/ffr31mr/diary/200506060000/"
# blogの作者名を入れてください。
blogAuthor="yasuki"
# 画像を保存するローカル側のディレクトリ名を入れてください
imageDir="images"
# 画像へのリンクをローカルに保存したファイルに変更するかしない
# かを選択します。
# 0-->変更しない
# 1-->変更する
imageLinkUpdate=0
# ダウンロードするファイルが重複していたときの動作をきめます。
# 0-->ファイル重複があったら上書き
# 1-->ファイル重複があったら停止
imageFileDuplicateCheck=0
###################################################
# 以下は、変更しないでください。
###################################################
require 'kconv'
require 'hpricot'
require 'open-uri'
require 'date'
# 本文、コメント、トラックバックに共通にもっている
# 項目をクラス定義
class BlogItem
def initialize()
@date=nil
@body=nil
end
def setDate( str_date )
@date=Date.strptime(str_date, "%B %d, %Y")
end
def setBody( body )
# body=body.gsub("---","===")
@body=body
end
def getDate
printf("DATE: %s\n",@date.strftime("%m/%d/%Y %H:%M:%S"))
end
def getBody
printf("BODY:\n%s\n",@body)
end
end
# トラックバックのクラス定義
class Trackback < BlogItem
def initialize()
@pingtitle=nil
@pingurl=nil
@pingblogname=nil
end
def setPingTitle( str_title )
@pingtitle=str_title
end
def setPingUrl( str_url )
@pingurl=str_url
end
def setPingBlogName( str_name )
@pingblogname=str_name
end
def getPingTitle()
printf("TITLE: %s\n",@pingtitle)
end
def getPingUrl()
printf("URL: %s\n",@pingurl)
end
def getPingBlogName()
printf("BLOG NAME: %s\n",@pingblogname)
end
def getAll()
printf("-----\n")
printf("PING:\n")
getPingTitle()
getPingUrl()
printf("IP:\n")
getPingBlogName()
getDate()
getBody()
end
end
# コメントのクラス定義
class Comment < BlogItem
def initialize()
@commauthor=nil
end
def setCommAuthor( str_author )
@commauthor=str_author
end
def getCommAuthor
printf("AUTHOR: %s\n",@commauthor)
end
def getAll()
printf("-----\n")
printf("COMMENT:\n")
getCommAuthor()
printf("EMAIL:\n")
printf("IP:\n")
printf("URL:\n")
getDate()
printf("SECRET: 0\n")
printf("PASS:\n")
getBody()
end
end
# ブログエントリのクラス定義
class Entry < BlogItem
def initialize()
@title=nil
@author=nil
@category=nil
end
def setTitle( str_title )
@title=str_title
end
def getTitle
printf("TITLE: %s\n",@title)
end
def setAuthor( str_author )
@author=str_author
end
def getAuthor
printf("AUTHOR: %s\n",@author)
end
def setCategory( str_category )
@category=str_category
end
def getCategory
printf("PRIMARY CATEGORY: %s\n",@category)
printf("CATEGORY: %s\n",@category)
end
def getAll()
printf("--------\n")
getTitle()
printf("STATUS: Publish\n")
printf("CONVERT BREAKS: 0\n")
printf("ALLOW COMMENTS: 1\n")
printf("ALLOW PINGS: 1\n")
getAuthor()
getCategory()
getDate()
printf("-----\n")
getBody()
printf("-----\n")
printf("EXTENDED BODY:\n")
printf("\n")
printf("-----\n")
printf("EXCERPT:\n")
printf("\n")
printf("-----\n")
printf("KEYWORDS:\n")
printf("\n")
end
end
# Arrayクラスに複数要素取得のメソッドを追加定義
class Array
def every(&block)
arity = block.arity
return self.each(&block) if arity <= 0
i = 0
while i < self.size
yield(*self[i, arity])
i += arity
end
self
end
end
# hpricotの検索で、大文字小文字を区別しない
# by http://d.hatena.ne.jp/tech-kazuhisa/20090618/1245337521
class Hpricot::Elem
def attributes
if raw_attributes
raw_attributes.inject({}) do |hsh, (k, v)|
hsh[k.downcase] = Hpricot.uxs(v) #hashのkeyを小文字に変換
hsh
end
end
end
end
# targetUrlを要素に分割
targetArray=targetUrl.split("/")
targetHost=targetArray[2]
targetId=targetArray[3]
targetEntry=targetArray[4]+"/"+targetArray[5]
# imagesを保存するディレクトリの有無確認
if !FileTest.exist?(imageDir) then
Dir::mkdir(imageDir)
end
# エントリの取得ループ開始
e=Entry.new
loop {
nextUrl=nil
doc = Hpricot( open(targetUrl).read ) # Get Blog Entry
#
# Get Next Link
#
(doc/:a).each do |link|
if ( "#{link.inner_html}".index(">>") ) then
nextUrl="http://" + targetHost + "#{link[:href]}"
targetUrl=nextUrl
end
end
#
# Author is constant
#
e.setAuthor(blogAuthor)
#
# Get Title
#
(doc/:meta).each do |meta|
if ("#{meta[:content]}" != "text/html; charset=EUC-JP" ) then
e.setTitle(Kconv.kconv("#{meta[:content]}",Kconv::UTF8))
end
end
#
# Get Date of Blog Entry
#
blogdate=doc.search("b").first
blogdate=blogdate.to_s[3..((blogdate.to_s).length-5)]
e.setDate(blogdate)
#
# Get Categoly
#
cate=doc.search("div.cate_list").inner_html
cate=Kconv.kconv(cate,Kconv::UTF8)
cate=cate[2..cate.index("]").to_i-2]
e.setCategory(cate)
#
# Get Blog Body
#
body=doc.search("div.lo")[0].inner_html
body=Kconv.kconv(body,Kconv::UTF8)
end_body=body.index("<div align=\"right\">").to_i
body = body[2..end_body-1]
#
# Get Image Files
#
body=Hpricot(body)
imagefile=""
filename=""
body.search("img").each do |im|
imagefile=im.attributes["src"]
if imagefile.index("image.space.rakuten.co.jp") then
ifn=imagefile.split("/")
filename=imageDir + "/" + ifn[ifn.length-1].to_s
if (filename[filename.length-4..filename.length]=="jpeg" or filename[filename.length-3..filename.length]=="jpg") then
open(imagefile) do |jp|
#
# image fileの上書きを禁止する
if imageFileDuplicateCheck==1 then
if FileTest.exist?(filename) then
printf("image file exist.(%s)\n",im)
exit
end
end
File.open(filename, "wb") do |fp|
fp.write(jp.read)
end
end
#
# 画像リンクをダウンロードしたローカルファイルに指定しなおす
if imageLinkUpdate==1 then
b=body.to_html
b[b.index(imagefile),imagefile.length]=filename
body=Hpricot(b)
end
end
end
end
#
# 最終的な本文をオブジェクトに保存
#
e.setBody(body.to_html)
#
# Get Comments
#
ci=0
commArray=Array.new
cbody=doc.search("/html/body").inner_html.to_s
cbody=Kconv.kconv(cbody,Kconv::UTF8)
while (cbody.include?("<!-- bbs -->")) do
c=Comment.new
startComment=cbody.index("<!-- bbs -->")
endComment=cbody.index("<!-- /bbs -->")
comm=Hpricot(cbody[startComment..endComment+13])
commTitle=comm.search("/table/tr/td")[0].inner_text.strip
commAuthor=comm.search("/table/tr/td")[1].inner_text.strip
c.setCommAuthor(commAuthor)
comm.search("div.lo").each do |commBody|
commBody=commBody.inner_html
end_body=commBody.index("<div align=\"right\">").to_i
commBody=commBody[0..end_body-1].strip
dateStart=commBody.rindex("(")
dateEnd=commBody.rindex(")<br />")
commDate=commBody[dateStart+1..dateEnd-1]
c.setDate(commDate)
c.setBody(commTitle+"\n"+commBody)
end
commArray[ci]=c
cbody=cbody[endComment+14..cbody.length]
ci += 1
end
#
# Get Trackback
#
pingArray=Array.new
pbody=doc.search("/html/body").inner_html.to_s
pbody=Kconv.kconv(pbody,Kconv::UTF8)
pi1=0
if (pbody.include?("<a name=\"trackback\">")) then
startTrackback=pbody.index("<a name=\"trackback\">")
endTrackback=pbody.rindex("<!-- \/Center Column -->")
ping=Hpricot(pbody[startTrackback..endTrackback-13])
ping.search("/table/tr/td").every do |pingTitle,pingBlogName|
p=Trackback.new
pT=Hpricot(pingTitle.to_s)
pBN=Hpricot(pingBlogName.to_s)
p.setPingTitle(pT.search("a").inner_text)
p.setPingBlogName(pBN.search("a").inner_text)
p.setPingUrl(pT.search("a.href"))
pingArray[pi1]=p
pi1 += 1
end
pi2=0
ping.search("div.lo").each do |pingBody|
pingBody=pingBody.inner_html
pingArray[pi2].setBody(pingBody)
dateStart=pingBody.rindex("(")
dateEnd=pingBody.rindex(")")
pingDate=pingBody[dateStart+1..dateEnd-1]
pingArray[pi2].setDate(pingDate)
pi2 += 1
end
pbody=pbody[endTrackback+14..pbody.length]
end
# Output Blog Entry of MT Format
e.getAll()
#
# If the entry have comments?
# then output comments
if ( ci>0 ) then
commArray.each do |i|
i.getAll()
end
end
#
# If the entry have trackback?
# then output trackbacks
if ( pi1>0 ) then
pingArray.each do |i|
i.getAll()
end
end
#
# Is a final entry?
if (nextUrl==nil) then
break
end
}