タグ「perl」が付けられているもの

Perlやり始めて4年くらい経つんでもう初心者ってほどではないという立場から言ってみます。 「コードとかプログラミングに関することをブログに晒すってすごくいい」と思います。 最近Twitterがあるもんで、情報の発信の力をそちらに取られている感があって若干悲しいので、 もっとブログ使った方がいいと考えるのです。 で、コードを晒したりすると何が嬉しいって、とにかく自分が成長できます。 そしてお友達が増えます。ただそれだけだけどすっごく重要。 俺はそれで成長できたし、あの!dankogaiさんとお友達?になって雑誌での対談まではたしちゃいました。 というエピソードを例に挙げるんで参考にしてくださいね。

# まぁ、dankogaiさんと言ってもただのエロ親父なんですけどね^^; 本人には内緒だよ!

2007/8/3 ニコニコ動画をダウンロードするPerlスクリプトのコードをブログに書く

Perl、割とかじり始めの俺がニコニコ動画のflvをダウンロードしちゃうイケナイスクリプトをブログに晒す。 正直今見るとひどいコードだ。

Perlでニコニコ動画のflvとコメントxmlをダウンロードする (Yusukebe::Tech)

2007/8/4 dankogaiさんに添削される、コード量半分くらいになる

ニコ厨のdankogaiさんが即座に反応。 「勝手に添削」シリーズとして添削され、コード量が半分くらいになったし、少なくなっただけじゃなく スマート!ぶっちゃけると一瞬、怒られた感じがして腹が立ったが、ちょっとするとすげー!こんな風に書けるんだ!すげー!ってなり感動する。

404 Blog Not Found:perl - 勝手に添削 - ニコニコ動画ダウンローダー

2007/10/1 Shibuya.pm Tech Talk #8 で dankogai 氏と初めて会う

日本最大のPerlコミュニティの集まり「Shibuya.pm Tech Talk #8」であまり空気を読まず、 いきなり「リビドー駆動開発によるPlaggerとCatalystを使ったサイト開発」という題名でLightning Talkをする。 とにかく発表がひどかった。途中のトイレ休憩でdankogaiさんと隣になり、おそるおそる「添削してくれてありがとうございます」と言うと、なんだかよくわからない返答をされる。 発表が終わって、解散の時に再びdankogai氏に話かけられる。 「コード何行書く度にヌイテるの?」一瞬意味が分からずキョドってしまい反応できず...

Shibuya.pm tech talk #8 で 「リビドー駆動開発によるPlaggerとCatalystを使ったサイト開発」を発表してきました - ゆーすけべー日記

2009/9/11 YAPC::Asia 2009 東工大会場にてWEB+DB PRESSの連載でdankogai氏と対談が実現

WEB+DB PRESS vol.53 内「アルファギークに逢いたい」のゲストとして俺が採用され、 YAPC::Asia 2009 の東工大内で対談が行われる。 内容は主にエロについて。dankogai氏がエロ漫画いいよっていってたのが印象に残っている。 この頃からなんかまともに話せるようになった気がするよ。

本日発売の「WEB+DB PRESS vol53」の「アルファギークに逢いたい」のゲストは俺です - ゆーすけべー日記

現在

と、まぁ現在に至るわけですが、 たったひとつのスクリプトをブログに晒したおかげで、dankogaiさんと友達になれただけじゃなくって、 いろいろと輪が広がったんですよ。 そしてすごい成長するキッカケとなりました。 だから特にプログラミングを志す方は是非、自分のブログを持ってない人は持って、 ブログでコードとかプログラミングについての話題を「晒す」といいと思います。

「ただ」、問題なのはその記事がハイレベルな人にフックするか、ひっかかるかってことがないと どうしょもないです。 だからこそ面白いアイデアのスクリプトなりなんなりを公開するという努力が必要かと思うのです。 難しいかもしれませんが、見てる人はきっと見てるので続けるといいと思いますし、 俺の場合、Perlの話題だったらなるべく追うようにしていますから、 ブログ書いたら教えてくれるとみちゃいますよー。

ということで、Enjoy!

今朝、「そろそろ...」とJapan Perl Association会長の牧さんからTwitterで声をかけられて、 一応企画のドラフトまで作りました。 それはどういうことかというと...。 カジュアルPerlのイベントとしてJPAの協力?にて「Perl初心者向け勉強会」を開催します! 予定ですが、日程は4/21(水曜日)19:00-21:00で、場所はおそらく初台のどこかになると思います。 最後にドラフトのプログラム原稿を貼付けておきますが、 テーマが「CPANとエディタ」となっております。 「CPANってなんぞー」という方を含め、少しでもPerlを勉強したいと思っている方に参加してもらいたいと思います。 内容は、スペシャルゲスト(世界のmさん予定があえば)を含め4人の方を講師に迎え、 それぞれライブコーディングを含めた講義?っぽい発表をみんなで聴くという形になります。 Perlは初心者向けの勉強会が非常に少ないというかそんなの聞いたことないので、 いい機会になればと思っています。 なるべく、常連なPerlerメンツにならないように参加資格を初心者向けに設定し、 ATNDで近日募集を開始しますので、よろしくお願いいたします。 何かご意見あれば、はてなブックマークなりTwitterなりでコメントくれればできる限り反映、リプライしたいと思います。

昨日の夕方頃、YouTube API のドキュメントを見たら、急に内容が追加されていてびっくらこいたわけですが、 YouTube の API に新しく、動画をアップロードする機能やプレイヤーをJavaScriptから制御できる機能が追加されました。というわけで、早速 Perl を使ってローカルにある動画をYouTubeにアップロードするスクリプトを書いてみました。いろいろと癖があるので、適当に解説をします。

今回試したのは「Direct Uploading」という方法で、ローカルにあるスクリプトから直接動画ファイルを読み込んでポストするものです。他にもウェブフォームからユーザーにファイルを選んでもらってアップロードするやりかたもあるようです。この新API、とても充実しています(その代わりなのか昨日はやたらGDataのフィードが重たかったよ!)。

アップロードする流れは以下の順番になります。

  1. Developer Key を取得
  2. YouTube アカウントでの認証
  3. authentication_token の取得
  4. アップロードするビデオ情報の設定
  5. リクエストの作成
  6. アップロード
  7. 結果の得取

YouTube にある動画を検索して結果を取得するだけなら、GDataのフィードを読めばいいので、関係ないのですが、今回の場合は Developer Key が必要になってきます。 以下のページから登録ができます。

次にYouTubeアカウントの認証について説明します。 動画をアップロードするとなると、その人のYouTubeのアカウント名義でアップロードするわけであり、そのアカウント情報を用いて認証をしなければなりません。いつもYouTubeで利用しているユーザー名とパスワードを認証URLにPOSTで渡して、authentication_token とやらを取得します。 この authentication_token がアップロードをするリクエストに必要になってきます。 認証だけならリクエストURLに対してPOSTメソッドを発行するだけです。 最後にアップロードするサンプルスクリプトを掲載しますが、そのサンプルから認証をするサブルーチンを紹介すると以下のようになります。HTTP::Request::Common を使ってPOSTのリクエストを生成しています。 Emailパラメータにはユーザーアカウントを入れます。Emailとありますが、YouTubeに登録しているメールアドレスではありません。 アカウント名です。これが、最初にはまったポイントです。source パラメータはなんか適当に入れてればよさげ。


use LWP::UserAgent;
use HTTP::Request::Common;

my $ua = LWP::UserAgent->new;

sub auth {
    my $request = POST(
        "https://www.google.com/youtube/accounts/ClientLogin",
        Content_Type => 'application/x-www-form-urlencoded',
        Content      => [
            Email   => $username,
            Passwd  => $password,
            service => "youtube",
            source  => "uploads",
        ],
    );
    my $response = $ua->request($request);
    die $response->status_line unless ( $response->is_success );
    $response->content =~ /Auth=(.*?)\n/;
    return $1;
}

返ってきた文字列からAuth=xxxxxxxxxxxxxxxxxxという部分を抜き出せばそれがauthentication_tokenとなります。

次にアップロードするビデオの設定をします。基本的にGDataということで、ビデオの情報をAtomのentry形式で記述します。Atomとはいえ、その記述形式がYahoo!のMedia RSSを使っているので、モジュールは使わないで、テキストで書いてみました。もっとスマートなやり方があると思いますが、とりあえずわかりやすいので。 これもサブルーチンにしています。

sub video_detail {
    my $param = shift;
    foreach my $key ( keys %$param ){
        utf8::encode($param->{$key}) if utf8::is_utf8($param->{$key});
    }
    my $title = $param->{title} || die "title is required";
    my $description = $param->{description} || die "description is required";
    my $category = $param->{category} || "People";
    my $keywords = $param->{keywords} || die "keywords is required";

my $video_detail = << "XML";
<?xml version="1.0"?>
<entry xmlns="http://www.w3.org/2005/Atom"
 xmlns:media="http://search.yahoo.com/mrss/"
 xmlns:yt="http://gdata.youtube.com/schemas/2007">
    <media:group>
    <media:title type="plain">$title</media:title>
    <media:description type="plain">$description</media:description>
    <media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">$category</media:category>
    <media:keywords>$keywords</media:keywords>
  </media:group>
</entry>
XML
   return $video_detail;
}

それぞれのパラメータが無いとdieしてますが、これらが空だとアップロードした時にAPIから怒られちゃいますので、しっかり設定しましょう。これも軽くはまりました。

この様にビデオの情報とそのビデオ自体のファイルを手元に用意したら、POSTのリクエスト作成します。 以下のURLがPOSTする先のURLです。

http://uploads.gdata.youtube.com/feeds/api/users/<username>/uploads

リクエストのヘッダーに含める要素が結構あって、まず、Content-Type は multipart/related にしなければいけません。次に認証がらみで、上記の authentication_token と developer key を

Authorization: GoogleLogin token=<authentication_token>
X-GData-Key: key=<developer_key>

という形式で含めます。ここが一番はまったところで、ドキュメントによると、Authorization のところが

Authorization: AuthSub token=<authentication_token>

になっていて、最初はこちらで試していたのですが、はねられました。このAuthSubというのは今回の「Direct Uploading」では使えなくて、ウェブフォームから外部ユーザーによってアップロードする場合などに使うようです。

ヘッダーの次は、リクエストの中にいれるコンテンツを入れます。用意しておいたビデオ情報の Atom 及び 実際の動画ファイルであるバイナリ形式のデータです。それぞれ、Content-Typeを「application/atom+xml」、動画の場合はそれにあった、例えば「video/mpeg」などにします。 upload サブルーチンのリクエスト生成までのコードはこんな感じです。

sub upload {
    my $token = shift;
    my $url =
      "http://uploads.gdata.youtube.com/feeds/api/users/$username/uploads";
    my $request = HTTP::Request->new( POST => $url );

    $request->header(
        "Authorization" => "GoogleLogin auth=$token",
        "X-GData-Key"   => "key=$developer_key",
        Slug            => $filename,
        Content_Type    => 'multipart/related',
    );
    $request->add_part(
        HTTP::Message->new(
            [ Content_type => 'application/atom+xml' ],
            $video_detail
        )
    );
    $request->add_part(
        HTTP::Message->new( [ Content_type => $content_type ], $data ) );

それで、いよいよリクエスト発行します。うまくいかなければエラーが返ってきますし、うまくいけばアップロードした動画のYouTubeでの情報がGData形式で返却されます。 その部分が upload サブルーチンの残りの部分になります。取得したGDataはそのままprintしていますが、 利用する場合はパースなどをしましょう。

    my $response = $ua->request($request);
    die $response->status_line unless ( $response->is_success );
    print $response->content;
}

以上でアップロードは完了です。YouTubeにログインしMyAccountのMyVideo(http://www.youtube.com/my_videos)にアクセスしたら変換中のさきほどあげた動画があれば成功というわけです。

youtube

アカウントのことも含め情報を全てコードに記述しているので、モジュール化したいところではありますが、 とりあえずうまくいったということでめでたしめでたし。 これを使っていろんなことができそうですね! 以下、アップロードするサンプルの全コードになります。

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Request::Common;
use IO::All;
use utf8;

# account settings
my $username = "your_account";
my $password = "your_password";
my $developer_key = "your_developer_key";

# video settings
my $filename = "movie01.mpg";
my $content_type = "video/mpeg";
my $video_detail = video_detail(
    {
        title       => "test",
        description => "description",
        keywords    => "tag1,tag2",
    }
);

my $ua    = LWP::UserAgent->new( keep_alive => 1 );
my $data  = io($filename)->binary->all;
my $token = auth();
upload($token);

sub upload {
    my $token = shift;
    my $url =
      "http://uploads.gdata.youtube.com/feeds/api/users/$username/uploads";
    my $request = HTTP::Request->new( POST => $url );

    $request->header(
        "Authorization" => "GoogleLogin auth=$token",
        "X-GData-Key"   => "key=$developer_key",
        Slug            => $filename,
        Content_Type    => 'multipart/related',
    );
    $request->add_part(
        HTTP::Message->new(
            [ Content_type => 'application/atom+xml' ],
            $video_detail
        )
    );
    $request->add_part(
        HTTP::Message->new( [ Content_type => $content_type ], $data ) );

    my $response = $ua->request($request);
    die $response->status_line unless ( $response->is_success );
    print $response->content;
}

sub auth {
    my $request = POST(
        "https://www.google.com/youtube/accounts/ClientLogin",
        Content_Type => 'application/x-www-form-urlencoded',
        Content      => [
            Email   => $username,
            Passwd  => $password,
            service => "youtube",
            source  => "uploads",
        ],
    );
    my $response = $ua->request($request);
    die $response->status_line unless ( $response->is_success );
    $response->content =~ /Auth=(.*?)\n/;
    return $1;
}

sub video_detail {
    my $param = shift;
    foreach my $key ( keys %$param ){
    utf8::encode($param->{$key}) if utf8::is_utf8($param->{$key});
    }
    my $title = $param->{title} || die "title is required";
    my $description = $param->{description} || die "description is required";
    my $category = $param->{category} || "People";
    my $keywords = $param->{keywords} || die "keywords is required";

my $video_detail = << "XML";
<?xml version="1.0"?>
<entry xmlns="http://www.w3.org/2005/Atom"
 xmlns:media="http://search.yahoo.com/mrss/"
 xmlns:yt="http://gdata.youtube.com/schemas/2007">
    <media:group>
    <media:title type="plain">$title</media:title>
    <media:description type="plain">$description</media:description>
    <media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">$category</media:category>
    <media:keywords>$keywords</media:keywords>
  </media:group>
</entry>
XML
   return $video_detail;
}

初めてのPerl
posted with yusukebe.com::AmazonSearch on 2008.3.13
  • ランダル・L. シュワルツ トム フェニックス Randal L. Schwartz Tom Phoenix 近藤 嘉雪
  • 単行本 / オライリージャパン (2003/05)
  • Amazon 売り上げランキング: 12132
  • Amazon おすすめ度の平均: 4.5
    • 5 定番書
    • 5 初心者も持っておきたい一冊
    • 5 CGI言語としてのPerl
Amazon.co.jpで詳細を見る

プログラミングPerl〈VOLUME1〉
posted with yusukebe.com::AmazonSearch on 2008.3.13
  • ラリー ウォール ジョン オーワント トム クリスチャンセン Larry Wall Jon Orwant Tom Christiansen 近藤 嘉雪
  • 単行本 / オライリー・ジャパン (2002/09)
  • Amazon 売り上げランキング: 6070
  • Amazon おすすめ度の平均: 4.5
    • 4 値段は高いけど・・・
    • 5 CGIを自在にこなす第一歩の書
    • 5 Perl文法の仕組みを詳細に知りたい人の本
Amazon.co.jpで詳細を見る

まるごとPerl! Vol.1
posted with yusukebe.com::AmazonSearch on 2008.3.13
  • 小飼 弾 宮川 達彦 伊藤 直也 川合 孝典 水野 貴明
  • 大型本 / インプレスコミュニケーションズ (2006/08/24)
  • Amazon 売り上げランキング: 89091
  • Amazon おすすめ度の平均: 5.0
    • 5 技術書・解説書というよりはマイルストーン
Amazon.co.jpで詳細を見る

最新WebサービスAPIエクスプロ-ラ ~Amazon、はてな、Google、Yahoo! 4大Webサービス完全攻略
posted with yusukebe.com::AmazonSearch on 2008.3.13
  • Software Design 編集部
  • 大型本 / 技術評論社 (2005/09/23)
  • Amazon 売り上げランキング: 44588
  • Amazon おすすめ度の平均: 4.0
    • 4 Webサービスについてまとまっててサンプルプログラムも豊富
    • 4 情報は流通してこそ価値がある?
    • 3 完全攻略ではない
Amazon.co.jpで詳細を見る

1

プロフィール

yusukebe

ゆーすけべー / yusukebe
Yusuke Wada
1981/12/23 生
天然パーマ Erogeek
HP Twitter mixi はてブ
yusuke (at) kamawada.com
more...

最近10件のアクション

  • yusukebe tweeted, "AVPhoneがいい感じになりつつある http://avphone.tv/"
  • yusukebe tweeted, "YAPC::Asia 2010 前夜祭の裏テーマは「私をYAPCに連れてって!」?? - ゆーすけべー日記 http://bit.ly/alRbZ8"
  • yusukebe tweeted, "@lovecall はい!!!"
  • yusukebe tweeted, "@lovecall 全然いいので、5分でまとめるようにしてください。頭数にいれておきます。よろ"
  • yusukebe tweeted, "@lovecall そうそう!!!!"
  • yusukebe tweeted, "@lovecall 前夜祭のLTで、Perl小説の話してよ♡"
  • yusukebe tweeted, "@lovecall 全裸みたいの??"
  • yusukebe tweeted, "PerlCasualでYAPC前夜祭を担当させていただくことになりました。テーマはWA(F)にしようかと思います。本編で話せなかったけど話してみたい人は教えてください!"
  • yusukebe tweeted, "@lovecall YAPC来る?"
  • yusukebe heard Blur – End of a Century

最近のブログ記事

  • YAPC::Asia 2010 前夜祭の裏テーマは「私をYAPCに連れてって!」??

    *これは現時点ではYAPC::Asia本体、JPAとは全く関係のない見解です。 えー、10月14日に開催されるYAPC::Asia 2010前夜祭を PerlCasualで担当させていただくことになりました。そこで、 まだ正式に決まった訳ではないのですが、 プランを組んでみました。スピーカーを依頼する部分、 かなりの無茶ぶりを含んでいます。 ずばり、テーマは「Web Application (Framework)」です。 今まで3回やってきて要望が多いのにも関わらず触れられったものです。 Frameworkに括弧つけてるのはそれそのものじゃなくて それを応用した例の話もあってもいいかと思ったからです。 そして、裏のテーマは「私をYAPCに連れてって!」。 謎です。 詳細のタイムテーブルもプランの中にはあるのですが、 ちょろっとずつ決定していくということで、 今のところ見せられる概要はこんなんです。 基調講演(京都の人) Catalystを始めよう(全裸Bros.) WAF作者の集い LT(なんでもあり) 前夜祭はYAPCチケットを持っている人は無料、 持ってない人は1000円を払えば参加可能になる予定です。...

  • YourAVHostが最強のPC無料エロサイトになった件

    エロサイトとしては驚異的な、 はてなブックマーク数のべ(ドメイン移行したので「のべ」になってます)1,000以上を集めている YourAVHost。 YourFileHostのエロ動画を女優名別に探せるというシンプルなものでした。 今でもそれなりに人気があって検索語「youravhost」でたどり着く人が一番多いです。 そのYourAVHostが9月1日、ひっそりとリニューアルして(PC向け無料の)エロサイト最強になったっぽいので、 紹介です。 YourFileHost以外のエロ動画もAV女優名別、ジャンル別で探せる YourAVHost開始当初は通常検索できないYourFileHostの動画とAV女優名を結びつけたということが 一番の特徴だったわけです。今回のリニューアルでは、PornStarというエロサイトと統合したことにより、 YourFileHost以外にもMegaporn、XVideos、Empflixなど他5サイト以上の動画がAV女優名から探すことができるように なりました。また、個人の性癖にあわせたジャンル、つまり、「3P」や「パイパン」といった「タグ」からも エロ動画をみつけることができます。 YourFileHost動画もその場で再生 各種エンベッド(埋め込み)に対応し、 なんとYourFileHostもサイト内で再生可能になりました。 動画サイトにいかなくとも派手な広告の無いシンプルな画面で、再生できるので ヌクのに最適です。 素人動画も見れる AV女優以外に素人っぽい動画は素人というカテゴリーに入れられるようになりました。 素人動画もいいっすよね!! リニューアルを施してからサイト滞在率がなんと10倍近く跳ね上がりました。 Googleに再インデックスがちゃんとされたらサイト内検索つけようと思います。 そしたらもっと最強ですね。...

  • PerlスクリプトでWebサイト死活管理

    個人で作ってるサイトの死活監視を「再び」ちゃんとやろうと思っています。 そこで、Nagios使うまでも無く、Kazuhoさんの Kazuho@Cybozu Labs: 監視とは継続的なテストである、という話 (もしくは cronlog とテストスクリプトを組み合わせた監視手法について) みてシンプルに死活監視できるよなーと思って、 「Perlスクリプト」を書いてみました。 「死活」のみの監視なんで、サイトが正常では無かったらメールを飛ばすだけでいいという想定です。 設定をYAMLで持たせたかったり、メールをPerlから送りたかったりしたんで、 少しKazuhoさんのやってることより複雑になりましたが、まぁ簡単です。 #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use Email::Sender::Simple qw(sendmail); use...

  • ディレクトリ配下の.pmファイルでuseしているCPANモジュールを一気にインストールする

    これが一番簡単っぽい? Module::Usedなるモジュールをインストールして付属のmodules-usedコマンドを使ってみる。 $ cpanm --sudo Module::Used $ modules-used ./ | cpanm --sudo --skip-installed 今、お試し中だよ。うまくいけば、 Makefile.PLのrequiresちゃんと書いてない時とか便利だね。...

  • 話題のサイトをみつけるならTwib! - リニューアルしたよ

    Twitterでつぶやかれた日本語ポストを収集して人気順に並べるサービスTwibがリリース一周年記念ということでリニューアルしたよ。 はてぶに似たデザインになって見やすくなって、はてぶとは違ってみんなのツイート付きだったりして楽しいよ! いろいろ機能が追加されたけど目玉は、「バズワード機能」。 最近のツイートから特徴的な言葉を抽出してて、朝方だと「朝焼け」が大きな文字で表示されたりするよ。 もちろん、それと関連するTwitPicの写真とか見れるよ! しかも、サイト上でそのまま表示(エンベッド)されるから便利だね。 以下に、リニューアルの改善点を挙げるよー。 1. インターフェースデザイン刷新 インターフェースを全面的にリニューアルしました。 トップページにより価値の高い記事をカテゴリ分けを行うことにより表示させています。 2. バズワード機能の追加 つぶやきから特徴的な言葉の頻出を計ることにより、 「今」話題の「バズワード」を右上に常に表示しています。 バズワードと関連のあるサイト情報を一覧することが可能です。 例えば、朝方ですと、「朝焼け」といった単語が大きな文字で表示され、 多くのユーザーが朝焼けの写真等をtwitpicなどの写真サービスを使い アップロードしている模様がわかります。 3. 「今、影響力のあるユーザー」表示 直近のRT(リツイート)された回数を数えることにより影響力のあるユーザーを表示する機能を 追加しました。 4....


SEO対策 エロワード

閉じる