トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     crossdomain.xml以外の方法で別サーバーからデータを取ってくる方法
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Stommy
Åê¹ÆNo.41972
投稿日時: 2009-4-2 21:18
新米
居住地:
投稿: 1
使用環境:
Flash CS4, MacOSX
crossdomain.xml以外の方法で別サーバーからデータを取ってくる方法
Twitterからデータを取ってこようとしています。
Twitterのcrossdomain.xmlで、他のサーバーからのアクセスは拒否されます。

自分なりの調べてみたところ、CGIで何とかなると書かれていたのですが、詳しいことは見つけることが出来ませんでした。具体的にどうすればいいのか、よくわかりません。

よろしくおねがいします。


Twitterのcrossdomain.xml
--------------------
<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-access-from domain="twitter.com" />
<allow-access-from domain="api.twitter.com" />
<allow-access-from domain="search.twitter.com" />
<allow-access-from domain="static.twitter.com" />
<site-control permitted-cross-domain-policies="master-only"/>
<allow-http-request-headers-from domain="*.twitter.com" headers="*" secure="true"/>
</cross-domain-policy>
-------------------------------
961832p
Åê¹ÆNo.42048
投稿日時: 2009-4-9 16:05
常連
居住地: Akiruno-shi
投稿: 155
使用環境:
 
:AS3:
- Adobe Flex SDK, Eclipse, AIR GEAR
- LB.Log AS3, Alcon2

:AS2:
- AMES(ASDT, MTASC, Eclipse, swfmill)
- Natural Entry Point Method
- LB.Log, Zeroi

Pro, Firefox, Chromium(Iron), IE

----------------
Pro,
Re: crossdomain.xml以外の方法で別サーバーからデータを取ってくる方法
 
どのようなデータを取得したいのか不明なのですが、気になるので自分も挑戦してみました。
 ・テストページスクリーンショット

まとめWikiから公式APIの存在を知ったので見ていると、認証を必要としない public_timelineメソッド を発見。
自分はアカウントをもっていないので、このメソッドを使って公開ユーザーの最新発言をXML形式で取得、Flashで表示してみることに。
 ・Twitter API - TwitterまとめWiki

使用したメソッドのURL

http://twitter.com/statuses/public_timeline.xml

まず、上記URLをブラウザに入れて直接取得できることを確認しました。
次にFlashからの取得ですが、そのままURLを入れた場合はやはり取得できませんでした。作成は FlexSDK3.3.0.4852 です。

取得できない

…
var urlreq:URLRequest =
    new URLRequest("http://twitter.com/statuses/public_timeline.xml");
var urlloader:URLLoader = new URLLoader();
urlloader.addEventListener(Event.COMPLETE, urlloader_complete);
urlloader.load(urlreq);
…

あーだこーだやっていましたが、やっぱりCGIスクリプトを使って取ってくるのが確実なようです。

CGIスクリプトで取得

…
var urlreq:URLRequest = new URLRequest("public_timeline.cgi");
//var urlreq:URLRequest = new URLRequest("public_timeline.cgi?since_id=12345");
var urlloader:URLLoader = new URLLoader();
urlloader.addEventListener(Event.COMPLETE, urlloader_complete);
urlloader.load(urlreq);
…

public_timeline.cgi

…
print "Content-type:application/xml\n\n";
##パラメータ(?以降の文字列)の取得&チェック##コンテンツの取得
my $url = "http://twitter.com/statuses/public_timeline.xml?$param";
my $http = HTTP::Lite::Fetch->fetch($url) or die HTTP::Lite::Fetch->errstr;
print $http->body . "\n";
…

今回、取得用CGIスクリプトにはPerlを使いましたが、PHPなど他の言語でも大丈夫です。
 ・FlashでTwitterの発言を取得してみる | alt
 ・YOPPA BLOG » Flash(AS3)でcrossdomain.xml無しにクロスドメインにアクセスする

Fx3、IE6、IE7、Chromiumの各ブラウザで確認していたところ、なぜか IE6 だけ URLLoaderクラス の IOErrorEvent.IO_ERRORイベント が発生してデータ取得できないという問題がおきました(エラー番号は#2032)。
IE6のバグなのか分かりませんが、コンテンツが圧縮転送されているとダメということが分かり、圧縮しない設定を .htaccess に記述して回避できました。このへんはWebサーバーの環境によって違ってくると思います。
 ・FlexのHTTPアクセスで「#2032: ストリームエラー」が出てハマる - ヒマをみつけてWeb開発

.htaccess

<ifmodule mod_gzip.c>
    mod_gzip_on no
</ifmodule>

公式サイトには色々なライブラリがあり、Flash用のもいくつか紹介されていました。
その中でも Tweetr は、ドキュメントや取得用CGIスクリプト(PHP)も付属していましたので、手軽に始められそうな感じがしました。
 ・Twitter API Wiki / Libraries | ActionScript/Flash

試していませんが Adobe AIR では、CGIスクリプトを使わなくても出来るもようです。
 ・Adobe AIRでiTunes×Twitterクライアントを作ってみた(1/2) ? @IT

以上、日記みたいになってしまいましたが(汗)、何かの手がかりになれば幸いです。


----------------
:961832p:
- だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops