Author Archives: orbit - Page 23

YoutubeダウンロードURL生成β Perl

基礎となるプログラムです。
先日紹介したダウンロードの方法をPerlにて最小限に表現してみました。

#!/usr/bin/perl
#########################################
#ソフト名:YoutubeダウンロードURL生成β
#作成日:2009/11/5
#作者:ORBIT
#著作権:ORBIT SPACEへ帰属します。
#########################################


#LWPモジュールを使用する
use LWP;

print"YoutubetURLn>";
$Target = <stdin>;

#正規表現にてURLの情報を取得
$Target =~ /http://(.*)/watch?v=(w*)/;
my $host = $1;
my $id = $2;

#取得した情報からURLを生成
$URL = 'http://www.youtube.com/get_video_info?&video_id='."$id";

#HTMLの取得
my $soce = LWP::UserAgent->new->request(
		HTTP::Request->new(GET => "$URL"))->content;

		#TOKENの取得を行う
		$soce =~ /.*token=(.*)&thumbnail_url=.*/;
		my $t = $1;

#TOKENを出力
print"$tn";
#Downlad可能なURLを出力
print'http://youtube.com/get_video?video_id='."$id".'&t='."$tn";

Youtube ダウンローダー(CGI) 作成中・・・・・ 

ストリーミングに関して以前から興味を示しておりまして^^

ダウンロードサイトなんてありますがあれどうなってるんだろ?
一度動画を鯖に落としてユーザーに渡すってのは処理に時間取られるし・・・・
意味ワカンネ>△<;なんて考えたりw

今回詳しく(と言っても凄く簡単に)ダウンロードサイトに関して検証していきます。

まず今回対象にした動画(欲しいわけでもなく別に意味はないです)

この動画のURLは以下のようになっております。
http://www.youtube.com/watch?v=STrnME1GPcM&feature=related
このURLを解析すると
http://www.youtube.com/watch?v=[動画のID]&feature=related
このようになってます。
※この動画のIDごとに動画は違います。

では情報を引いて見ましょう。以下のようにリクエストを送ってみます。
http://www.youtube.com/get_video_info?&video_id=STrnME1GPcM
このような感じ^^
http://www.youtube.com/get_video_info?&video_id=[動画のID]
するとget_video_infoってファイルがダウンロードできます。

開いてみると・・・・・
[意外に長かったので載せませんw]
まぁ、気分悪くなってもがんばりましょう^^

この中から&token=~&の間を探して読み取ります。
F0%2F0&token=vjVQa1PpcFMoXJpKyBVe9m9fn5_BdJan5dlKtTvPvPA%3D&thumbnail_url=http%
の中なので『vjVQa1PpcFMoXJpKyBVe9m9fn5_BdJan5dlKtTvPvPA%3D』これですね^^
これを[動画のTOKEN]とします。URL上では&t=から始まります。
(公開されてるプログラムの&t=が何なのかを調べるのに凄く時間が掛かりました^^;)

これを利用し以下のURLを作成します。
http://www.youtube.com/get_video?video_id=STrnME1GPcM&t=vjVQa1PpcFM-dhGnEO-Xuu8sh5y9EhVH6zjFPb328Vg
まぁ、こんな感じになります。
http://www.youtube.com/get_video_info?&video_id=[動画のID]&t=[動画のTOKEN]

上のURLへアクセスするとvideoplaybackなんてのがダウンロードされるのでvideoplayback.flvと変更すると動画が見れます^^

これらをPerlで表現すればダウンローダが作れるんですね~^^
動画ではなく直接作成したURLを表示すれば鯖にも負担をかけないわけか~(納得w)
ソフトではなく自分の手作業でダウンロードできたという事が非常に興味深い!!

WordPress アップグレードできない 解決方法

GD Star RatingやWP自体を自動アップグレードできずに困ってたところ解決方法を発見したのでしょうかいします。

WordPressをインストールしたディレクトリにあるwp-settings.phpを開き13行目付近の’WP_MEMORY_LIMIT’, ’32M’を128Mに変更します。

すると今まで上手くいかなかった自動アップグレードができるようになります。

CentOS OpenCV インストール

# wget http://jaist.dl.sourceforge.net/sourceforge/opencvlibrary/opencv-1.0.0.tar.gz
# tar xvzf opencv-1.0.0.tar.gz
# cd opencv-1.0.0

# vi cvaux/include/cvaux.h
1137行目 CvMemStorage* storage; /*storage for □foreground_regions□*/

1137行目 CvMemStorage* storage; /*storage for foreground_regions*/

# ./configure
もし以下のようなエラーが出たら・・・・
checking for C++ compiler default output file name… configure: error: C++ compiler cannot create executables. See `config.log’ for more details.
g++が入っていないのでg++のインストール
# yum install gcc-c++

もう一度
# ./configure
すればできるはず^^

# ./configure
# make
# make install

# vi /etc/ld.so.conf.d/opencv.conf
下記を入力
/usr/local/lib

# ldconfig
# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}

これでインストール完了

OpenCVのインストール Vine Linux 5.0

どうしても顔認証がしたいのでライブラリーを追加しました。
apt-getじゃまだインストールできないんですね・・・・・・・・
と言うことでソースからビルトしてインストールします。

# apt-get install gtk2-devel libjpeg-devel libpng-devel zlib-devel libtiff-devel

# wget http://nchc.dl.sourceforge.net/sourceforge/opencvlibrary/opencv-1.0.0.tar.gz
# tar xvzf opencv-1.0.0.tar.gz
# cd opencv-1.0.0
# ./configure –prefix=/usr
下記のようになりました。
General configuration ================================================
Compiler: g++
CXXFLAGS: -Wall -fno-rtti -pipe -O3 -g -march=i686 -ffast-math -fomit-frame-pointer

Install path: /usr

HighGUI configuration ================================================

Windowing system ————–
Use Carbon / Mac OS X: no
Use gtk+ 2.x: yes
Use gthread: yes

Image I/O ———————
Use libjpeg: yes
Use zlib: yes
Use libpng: yes
Use libtiff: yes
Use libjasper: no
Use libIlmImf: no

Video I/O ———————
Use QuickTime / Mac OS X: no
Use xine: no
Use ffmpeg: no
Use dc1394 & raw1394: no
Use v4l: yes
Use v4l2: yes

Wrappers for other languages =========================================
SWIG
Python no

Additional build settings ============================================
Build demo apps yes

Now run make …

あとは普通に・・・・・・・・
# make
# make install

これでインストール完了

Image::ObjectDetectのインストール

# wget http://search.cpan.org/CPAN/authors/id/J/JI/JIRO/Image-ObjectDetect-0.11.tar.gz
# tar xvzf Image-ObjectDetect-0.11.tar.gz
# cd Image-ObjectDetect-0.11
# perl MakeFile.PL
# make
# make install

[注意事項]
※はまりました^^;
パスが違いますシンボリックでも張っておいた方がいいのかな?
インストールしたはずなのに使えねえ・・・・なんてことが。

VineLinuxではこれが
/usr/local/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml
こんな感じになります。
/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml

ROS カウンター Ver.1.02

同時にアクセスされるとカウントがリセットさせるバグを修正しました。
ファイルロックの重要性がよく分かりました^^;
TOPページでの公開はもう少し様子を見てから行います。

#!/usr/bin/perl
#######################################################
#スクリプト名:ROS カウンター Ver.1.02
#作者:ORBIT
#著作権:ORBIT SPACEに帰属します。
#著作権表示は一切行いません。自由にお使いください。
#######################################################

#各種設定
#------------------------------------------------------
#イメージの保存ディレクトリ
$imgs = './img/';
#ログの保存場所
$ip_log = 'ip.log';
$counts_log = 'counts.log';
#------------------------------------------------------

#IPを取得
$ip = $ENV{'REMOTE_ADDR'};

#GETのデータから位を取得
$buf = $ENV{'QUERY_STRING'};
--$buf;

#過去ログの取得
open (OUT,"$counts_log");
flock(OUT, 1);
$counts_data = <out>;
close(OUT);

open (IP_OUT,"$ip_log");
flock(IP_OUT, 1);
@ip_data = <ip_OUT>;
close(IP_OUT);
chomp($ip_data[0]);
if($ip eq $ip_data[0]){&img;}
$ip_data[0] = "$ip_data[0]n";

#インクリメントして保存
open (IN,">$counts_log");
flock(IN, 2);
if($counts_data eq ""){$counts_data = "00000"};
++$counts_data;
print IN $counts_data;
close(IN);

#IPを記録
open (IP_IN,">$ip_log");
flock(IP_IN, 2);
unshift @ip_data, "$ipn";
print IP_IN @ip_data;
close(IP_IN);

&img;

# 画像表示
sub img{
#過去ログを取得し逆順に並べ替える
@list = split(//,$counts_data);
@img_list = reverse (@list);
$nu = $img_list[$buf];

open(IG,"$imgs$nu.gif");
print "Content-type: image/gifnn";
binmode(IG);
binmode(STDOUT);
print <ig>;
close(IG);
exit;
}

Imagerのインストール Vine Linux 5.0 Perl

更新
# apt-get update
# apt-get upgrade
ライブラリーをインストール
# apt-get install libpng-devel libjpeg-devel giflib-devel
※これらのライブラリがないと上手く動かない。

# cpan
> install Imager
でインストールする。

もしも、インストールした後にライブラリ入れてエラーが出て認識されない場合。
# cpan
> force install Imager
でインストールする。

Perl モジュール Image::Magick VineLinux 5.0

新しいプログラムを考える上でどうしても必要になったのでインストール方法を探して
いましたが見つからなくて困っていました^^;

おそらくインストールできたので一応紹介しておきます。
※この方法はVineLinux(5.0)用です。
まず、普通に
# cpan
cpan[1]> install Image::Magick
とするとエラーでインストールできません。

下記のコマンドを実行します。
# apt-cache search ImageMagick | grep perl

おそらくImageMagick-perlが必要と言われるので
# apt-get install ImageMagick-perl
でインストールします。

再度下記を実行すると旨くインストールできます。
# cpan
cpan[1]> install Image::Magick

インストールできたか確認方法
# perl -MImage::Magick -e ”
と実行し何も出なかったらインストールに成功しています。

[おまけ]
もしもCan’t locate …………………..と出たらインストールされていません。

RSA暗号化について

暗号化の方法がとても気になったので調べてみました。
※特に可逆暗号化と公開鍵暗号についてです。

RSAの式(暗号化)
C = M^e (mod n)

調べてみたら呆気にとられるくらい簡単で単純です。

^(キャロット)は累乗という意味です。
modは除算した時に発生する余りを意味します。
Cが暗号化された文章を意味します。
Mは平文を意味します。
要するにCは平文Mをe乗してnで割った余りであると言うことになります。

今日は徹夜明けなので頭がボーっとしてまともに物事を考えられないので近いうちに
暗号化と複合化するプログラムを書いて見ます。

参考元:はやわかり RSA
参考元:ASCIIコードと文字の相互変換

VirtualHostでSSL接続

非常に困りました^^;
彼の野原 – FrontPage様よりワイルドカードを使った証明書を作成しました。

ですが、/etc/apache2/conf.d/ssl.confになんて記述してよいのか分からない(汗
エラーが起きてしまいます。

結局NameVirtualHost *:443を記述していないと言うことに気づくのに1時間ほどかかってしまいました^^;

追記した内容

NameVirtualHost *:443

<virtualHost *:443>
SSLEngine on
ServerName mail.orsx.net
DocumentRoot /var/www/html/webmail/
## certificate file path below
SSLCertificateFile /usr/share/ssl/certs/server.pem
SSLCertificateKeyFile /usr/share/ssl/certs/server.key
<directory /var/www/html/webmail/>
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</directory>
CustomLog /var/log/apache2/ssl_request_log 
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
</virtualHost>