✖
写真にもっとメタデータを書いておかないといけないんだろうけど、面倒くさくて無理なんだよなあ…… なんか簡単にできればいいのかな
✖
「餡の雲」で検索するといつのまにやら知らない人が出てくるようになっていて、なんか嫌な感じだし、それなりに愛着はあるけど、それほどこだわりもないしサイト名を変えたい…… 。でもいい名前が思いつかない。
✖
いろいろやって、ページのロード速度を改善してみた。
✖
サイト名を「氾濫原」に変えた。他人にとってあまり意味がない言葉で、かつ自分にとってある程度意味がある言葉、というのにしたくていろいろ悩んだ。
microdata を適当に抜き出す Perl スクリプト
あんまり仕様書読みこめてないけど書くだけ書いてみた。CPAN にあるのは依存がひどいし、別に HTML::Parser 的なもの一個の依存で JSON 返すようなのでいいじゃんと思った。やる気があればテスト書いて CPAN にあげたりしたいけど、あんまりやる気わかない。
結局 HTML::Parser ではなく HTML::TreeBuilder::LibXML にしたけど、普通に入るモジュールなのでよさそう。
レポジトリをつくってテストを書いた。
https://github.com/cho45/HTML-Microdata/blob/master/lib/HTML/Microdata.pm
use v5.12;
use LWP::Simple qw($ua);
use URI;
use JSON::XS;
my $uri = URI->new('http://www.lowreal.net/');
my $res = $ua->get($uri);
my $microdata = HTML::Microdata->parse($res->content);
say encode_json $microdata->items->{cho45}->{properties};
package HTML::Microdata;
use HTML::TreeBuilder::LibXML;
use Scalar::Util qw(refaddr);
use Hash::MultiValue;
sub new {
my ($class, $args) = @_;
bless {
items => {},
}, $class;
}
sub parse {
my ($class, $content, $opts) = @_;
my $self = $class->new($opts);
$self->_parse($content);
$self
}
sub items {
my ($self) = @_;
$self->{items};
}
sub _parse {
my ($self, $content) = @_;
my $tree = HTML::TreeBuilder::LibXML->new_from_content($content);
my $scopes = $tree->findnodes('//*[@itemscope]');
my $number = 0;
for my $scope (@$scopes) {
my $type = $scope->attr('itemtype');
my $id = $scope->attr('itemid');
unless ($scope->id) {
$scope->id($number++);
}
if (my $refs = $scope->attr('itemref')) {
my $ids = [ split /\s+/, $refs ];
for my $id (@$ids) {
my $props = $tree->findnodes('//*[\@id="' . $id . '"]//*[\@itemprop]');
for my $prop (@$props) {
my $name = $prop->attr('itemprop');
my $value = $self->extract_value($prop);
$self->{items}->{ $scope->id }->add($name => $value);
}
}
}
$self->{items}->{ $scope->id } = {
($id ? (id => $id) : ()),
type => $type,
properties => Hash::MultiValue->new,
};
}
my $props = $tree->findnodes('//*[@itemprop]');
for my $prop (@$props) {
my $name = $prop->attr('itemprop');
my $value = $self->extract_value($prop);
my $scope = $prop->findnodes('./ancestor::*[@itemscope]')->[-1];
$self->{items}->{ $scope->id }->{properties}->add($name => $value);
}
for my $key (keys %{ $self->{items} }) {
my $item = $self->{items}->{$key};
$item->{properties} = $item->{properties}->multi;
}
}
sub extract_value {
my ($self, $prop) = @_;
my $value;
if (defined $prop->attr('itemscope')) {
$value = $self->{items}->{ $prop->id };
} elsif ($prop->tag eq 'meta') {
$value = $prop->attr('content');
} elsif ($prop->tag =~ m{^audio|embed|iframe|img|source|video$}) {
$value = $prop->attr('src');
} elsif ($prop->tag =~ m{^a|area|link$}) {
$value = $prop->attr('href');
} elsif ($prop->tag eq 'object') {
$value = $prop->attr('data');
} elsif ($prop->tag eq 'time' && $prop->attr('datetime')) {
$value = $prop->attr('datetime');
} else {
$value = $prop->findvalue('normalize-space(.)');
}
$value;
} 関連エントリー
- SVGフォントのグリフを個別のSVG画像に変換する [tech] JavaScript の必要ないソーシャルボタン | Fri, Apr 15. 2016 - 氾濫原 これを作るとき、最初のう...
- textarea.value は代入すると値が変わる 以下のような挙動をする。 var textarea = document.createElement('textarea'); textar...
- microdata の itemref の解釈 microdata の itemref の解釈がよくわからない。 itemref で指定した ID を持つ要素の下もまた、そのアイテムのプロ...
- perl 5.19.9 の signatures 構文 (普通に引数を書ける構文) を試す Perl 5.19.9 で実装された signatures の構文をためしてみる - tokuhirom blog を見てそんなのできたのか...
- Ruby でスコープをはずれたときに自動で何かをする Guard オブジェクト Perl だと Guard オブジェクトとかいうハックがあって、スコープを出るタイミングで必ず呼ばれるファイナライ...
✖
✖
漠然と、いろいろ上手くいってないみたいな感じがしている。よくある。
✖
自分は自分の判断を正しいと思っているが (あたりまえだ)、一方メタな視点で自分を信じていない自分もいるのだ。
✖
✖
他人に対する信用というものが実感としてほとんどない割には、微妙なところで「このぐらいなら信じても良いだろう」と思い、その度にことごとく裏切られるので、余計他人が信用できなくなるという悪循環がある。これは単に自分が「信用する」という判断のしかたが間違っていることに他ならないんだけど、どうしたらいいのか全く分からない。
全く信用しないで生きていこう、というのは社会的には無理だ。どこかで線をひいて「ここまでは信用しても良いだろう」というのを自分の中で他人一人一人について見つけなければならない。例えば「技術的には信用できるが、人間的には信用できない」というのはありえるし「センスは信用できるが、技術的には信用ができない」とか「成果物は信用できるけど、言動は良く変わって信用できない」とか、いろいろある。
人を見る目というのは、誰かに頼ることのできないもの (だってその誰かを信用できるかなんてわからないからだ) で、自分でどうにかするしかないのだけれども、それを鍛える方法を発見することができない。
関連エントリー
- ✖ モチベーションを損う原因となるのは、行動の結果失敗することがありありと想像されることが大きくて、普段から何かにつけて、評価された結果「ダメだ...
- 勉強 アンテナの設計とか測定とかをしているうちに、もうちょっとちゃんと無線工学を学んでみようということで、いろいろやってる。 しかし、実際はじめて...
- ✖ そういえば、ものすごくイライラしているときは掃除すると多少気が紛れる (やる気になった場合だけだけど)。すこし前にイライラしたときは、ひたす...
- ✖ 「大金を手にしないほうがいい」という主張がどうやら嫌いで、そういうのを聞くとものすごく苛立ってしまう。その主張は実際に大金を手にした人が自分...
- ✖ やる気がでるとき、というのをちゃんと分析してみることが必要。 コードを書くことに関して 問題が細部まで分解できていて、実現可能な道筋が全て示...
✖
[tech] カテゴリは長くなりがちなので、最初の一段落を残して残りは「続きを読む」みたいにしたいかもしれない。微妙に面倒くさい。
関連エントリー
- KiCAD の回路図ファイルを CUI で SVG に変換したり、そのままブラウザで見たりする kicad-utils デモとレポジトリ 回路図ビューワ。開いてすぐ Load from url すると、github で公開されている回路図を読みこんで表示するよ...
- 子 先日生まれた。妻が頑張りました。 「焼き肉食べると生まれるらしいよ〜」とか言いつつ特に信じてはいないけど口実にして焼き肉食って帰ってきたら陣...
- Gmail のメールからクレカ請求を Zaim へ自動入力 ひとまず楽天カードの情報を Zaim に突っ込むまでスクリプトにしてみた。Amazon のも入れれるようにしたい。 https://gith...
- 移動運用用、軽量マルチバンドワイヤーアンテナシステム 移動運用時にワイヤーアンテナをお手軽に張れる方法を考えていた。10m超のケーブルを絡まらずに持ち運んで設営して回収するとうのは普通にやるとと...
- MLA (マグネチックループアンテナ / スモールループアンテナ) MLAはずっと試したいと思いつつ、帯域の狭さや自力での工作の難しさを考えるとなかなか手が出せなかった。 最近ファラデーシールドループの受信用...
✖
hAtom をやめて microdata にしてみた。


