作ったのは、チョー簡単なcgiで、やってることはパラメータで受けたURLを

perlにてリクエストし、JSON形式で返すだけ

 

#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use HTTP::Lite;
use JSON::Syck;
use Jcode;

my($data, %qq);
my $q    = CGI->new();
my $http = HTTP::Lite->new();
my $req  = $http->request($q->param('src')) or goto RET;
my $body = $http->body();

if ($q->param('headless')) {
    $body =~ s!^.*<body[^>]*>(.*)</body>.*$!$1!i;
}
my $char = getcode($body);
if ($char && $char !~ /utf\-?8/i) {
    $body = jcode($body, $char)->utf8;
}
for ($q->param()) {
    $qq{$_} = $q->param($_);
}
$data = {%qq, content => $body};
RET:

print
    $q->header(-type => 'application/x-javascript; charset=UTF-8'),
    $q->param('callback'), '(', JSON::Syck::Dump($data), ');', "\n";
exit;

 

まー、いたって簡単ですな

 

これを使って、右サイドバーのamazon広告をonloadで変えてみます

 

 

 

onloadでのjsは、こんな感じ

 

<!-- amazon image change start -->
    <script type="text/javascript" src="/mt/mt-static/jquery-1.2.6.pack.js"></script>
    <script type="text/javascript">
        $(function(){
            var i;
            for (i=0;i<=$(document.getElementsByTagName('iframe')).length;i++) {
                var fe = $(document.getElementsByTagName('iframe'))[i];
                if (!fe) continue;
                if (fe.src.match(/amazon.co.jp/)) {
                    var url  = 'http://modperlis.bounceme.net/jsonperl/amget.cgi';
                        url += '?headless=1';
                        url += '&number='+i+'&src='+escape(fe.src)+'&callback=?';
                    $.getJSON(url,
                        function (data) {
                            if (!data) return false;
                            data.content = data.content.replace(/\._SL100_\.jpg/, '._SL200_.jpg');
                            var el           = document.createElement('div');
                                el.id        = 'amazon_' + data.number;
                                el.innerHTML = data.content;
                            var fe               = $(document.getElementsByTagName('iframe'))[data.number];
                                fe.style.display = 'none';
                                fe.parentNode.appendChild(el);

                            var content = $('#amazon_' + data.number+' div:first-child')[0];
                            content.style.backgroundColor = '#eeeeee';
                            content.style.whiteSpace      = 'nowrap';
                            content.style.fontSize        = '14px';
                            content.style.border          = 'solid 1px black';
                            content.style.padding         = '6px';
                            for (i=0;i<=content.childNodes.length;i++) {
                                try{var tag=content.childNodes[i].tagName;}catch(e){;}
                                if (!tag) continue;

                                if (tag.match(/^form$/i)) {
                                    $(content.childNodes[i]).remove();

                                } else if (tag.match(/^p$/i)) {
                                    var id = $(content.childNodes[i])[0].id;
                                    if (!id) continue;
                                    if (id.match(/^privacy$/i)) {
                                        $(content.childNodes[i]).remove();
                                    }
                                }
                            }
                    });
                }
            }
        });
    </script>
<!-- amazon image change end -->

 

jQueryを使っていますが、まー、なんでもできます

 

使いたい方は、コメントにでも書いてくださいなw

mod_perlなので、リクエスト数は問題ないと思いますが、

なにぶん自宅サーバなので、レスポンスなどは・・・・気にしない環境でww

 

トラックバック(0)

このブログ記事を参照しているブログ一覧: iframeやら何やらの中身を操作したくて、JSONPにてリクエストを受けて、JSON形式にて返却するcgiを作ってみた

このブログ記事に対するトラックバックURL: http://modperlis.bounceme.net/mt/mt-tb.cgi/103

コメントする


画像の中に見える文字を入力してください。

Perl 勉強本

Oracle 勉強本

J2EE 勉強するなら、これしかなくね?

ブログ管理人

SE perler@29

アイテム

  • image001.gif
  • modperl.png

アドパートナー

tooland

Pingo!

boox