モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

ustream APIの呼び出しが長いrefererが付いてると失敗する件

以前PukiWiki用のustreamプラグインを作ったのですが、APIの呼び出し部分をjavascript化したバージョンをつくっていました。
そこで不思議な状況に会ったのでメモ。


javascriptバージョンはサックリ出来て、テストも上手く行ったのだけど、実際に使用してみるとなぜかうまく動かない場合がある。
いろいろと試してみると、Wikiのページ名がアルファベットだけとか、短いと問題がないことがわかる。
APIを呼び出しているのはjavascriptからのため、API呼び出ししたさいにrefererを参照していて、それが長すぎると失敗するのでは?と予想。


javascript部分のソース
ローカルで試す場合には「+ '&key=****'」の部分を削除すればそのまま動きます。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
var ust_api = "http://api.ustream.tv/json/channel/";
var command = "getCustomEmbedTag";
var option = "params=autoplay:" + "false" + ";mute:false;height:" + "386" + ";width:" + "480";

var api = ust_api + encodeURIComponent("ぬこのこ") + '/' + command + '?' + option + '&key=****' + '&callback=?';
$.getJSON(api, function(embedTag){ $(embedTag).prependTo('#ust_23432') });
</script>
<div id="ust_23432"></div>


成功する場合と失敗する場合でAPIの呼ばれ方やレスポンスを比べると http://livepass.conviva.com/lpconfig/cfg/〜 というのを呼んだ答えがちゃんと返ってきてない感じ。


【成功する場合】

http://flash.quantserve.com/quant.swf?fpf=1%2D0%2D0&videoId=5832768&swfv=WIN%2010%2C1%2C85%2C3&lc=%5F1288227111687%5F6552&content=video&publisherId=p%2D22sNmkTMKNC%2DA&url=http%3A%2F%2Fcdn1%2Eustream%2Etv%2Fswf%2F4%2Fviewer%2E302%2Eswf%3F%26cid%3D1%2F5832768%26vrsl%3Dc%2E4%2E465%26cdngw%3D86004%3B234462%3B533582%3B593716%3B1196564%3B1517932%3B1600110%3B1887058%3B1912160%3B1936474%3B2013461%3B2939037%3B2939081%3B3719622%26cdngw%3D6034348%3B6034389&qcv=2%2E0
→ レスポンス

http://livepass.conviva.com/crossdomain.xml
→ レスポンス
<?xml version="1.0" ?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*" secure="false" /> 
  <allow-http-request-headers-from domain="*" headers="*" secure="false" />
</cross-domain-policy>

http://livepass.conviva.com/lpconfig/cfg/c3%2Esver=2%2E9%2E0%2E33002&c3%2EcustomerName=c3%2EUstream&c3%2Eplatform=FL?random=576838079&uuid=3429590163
→ レスポンス
<?xml version="1.0"?>
<livePassConfig ccsWallTimeSec="1288227099" >
    <common>
        <gateways>
            <gateway protocolVersion="0" loadState="available">https://gw001.lphbs.com</gateway>
            <gateway protocolVersion="0" loadState="available">https://gw002.lphbs.com</gateway>
            <gateway protocolVersion="0" loadState="available">https://gw003.lphbs.com</gateway>
… みたいなのが返ってくる


【失敗する場合】

http://flash.quantserve.com/quant.swf?fpf=1%2D0%2D0&qcv=2%2E0&swfv=WIN%2010%2C1%2C85%2C3&lc=%5F1288227134765%5F4340&content=video&publisherId=p%2D22sNmkTMKNC%2DA&videoId=5832768&url=http%3A%2F%2Fcdn1%2Eustream%2Etv%2Fswf%2F4%2Fviewer%2E302%2Eswf%3F%26cid%3D1%2F5832768%26vrsl%3Dc%2E4%2E465%26cdngw%3D86004%3B234462%3B533582%3B593716%3B1196564%3B1517932%3B1600110%3B1887058%3B1912160%3B1936474%3B2013461%3B2939037%3B2939081%3B3719622%26cdngw%3D6034348%3B6034389

http://livepass.conviva.com/lpconfig/cfg/c3%2Esver=2%2E9%2E0%2E33002&c3%2EcustomerName=c3%2EUstream&c3%2Eplatform=FL?random=1464786144&uuid=3429590163
→ レスポンスが空

https://gw020.lphbs.com/crossdomain.xml
→ レスポンス
<?xml version="1.0" ?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*" secure="false" /> 
  <allow-http-request-headers-from domain="*" headers="*" secure="false" />
</cross-domain-policy>


どうしたもんか。
多分ustream API側の問題だと思うので、なんともならんかなあ…