获取Wordpress RSS feed的大小?

时间:2013-05-17 19:24:26

标签: wordpress actionscript-3 flash rss filesize

情景:

我有一个Flash网站(here),可以通过Wordpress的RSS从wordpress网站(here)导入一些内容(我添加了一个插件,在RSS中包含页面)。这不是我所知道的一个好主意,但是由于一长串原因,我不会进入它的设置我坚持:/

问题:

导入RSS源(它在运行时下载到SWF并像XML一样读取)时,我无法获取文件大小。这意味着预加载器不准确(我只是手动猜测一个数字,它现在可以使用,显然会随着时间的推移而增长)。 如何获得此文件大小?

我知道服务器上可能存在压缩feed /文件(GZip等)的某些设置,但我对wordpress架构非常不熟悉,尽管我付出了最大努力,但我无法找到应用此设置的位置

这是预加载器更新代码。 113 * 1024是我想放置rss_loader.bytesTotal(WordPress内容的加载器)的地方,但是当我这样做时rss_loader.bytesTotal返回为0:

function update_loading(e:Event):void
{
    var total:Number = stage.loaderInfo.bytesTotal + (113 * 1024) + css_loader.bytesTotal;
    var loaded:Number = stage.loaderInfo.bytesLoaded + rss_loader.bytesLoaded + css_loader.bytesLoaded;
    if (total == loaded)
    {
        updatePicture(360);
        loading_mc.perc.text = "100%";
        removeEventListener(Event.ENTER_FRAME,update_loading);
        nextFrame();
    }
    else
    {
        var deg:Number = (loaded / total) * 360;
        updatePicture(deg);
        loading_mc.perc.text = String(int((loaded / total) * 100))+"%";
    }
}

这是RSS导入代码,但我不相信它非常相关:

var rss_xml:XML = new XML();
var post_xml:XML = new XML();
var page_xml:XML = new XML();
var rss_loader:URLLoader;
rss_loader = new URLLoader(new URLRequest("http://news.sulsc.org/feed"));
function rss_loaded(e:Event):void
{
    rss_xml = XML(e.target.data);
    var rss_raw:String = String(rss_xml);
    rss_raw = rss_raw.split(":encoded").join("");
    rss_raw = rss_raw.split("\n").join("");
    rss_raw = rss_raw.split('<p style="text-align: right;">').join('<p class="right">');
    rss_raw = rss_raw.split('<p style="text-align: center;">').join('<p class="centre">');
    rss_raw = rss_raw.split('<p style="text-align: left;">').join('<p class="left">');
    rss_raw = rss_raw.split('<p style="text-align: justify;">').join('<p class="just">');
    var heading_replace:RegExp = new RegExp("(</h[0-9]>)(<h[0-9]>)","g9");
    var underline_replace:RegExp = new RegExp('<span style="text-decoration: underline;">(.*?)</span>',"gi");
    var bold_replace:RegExp = new RegExp('<strong>(.*?)</strong>',"gi");
    var italic_replace:RegExp = new RegExp('<em>(.*?)</em>',"gi");
    rss_raw = rss_raw.replace(heading_replace,'$1<p class="space"></p>$2');
    rss_raw = rss_raw.replace(underline_replace,'<u>$1</u>');
    rss_raw = rss_raw.replace(bold_replace,'<b>$1</b>');
    rss_raw = rss_raw.replace(italic_replace,'<i>$1</i>');

    var page_test:RegExp = new RegExp("http://(news.|www.|)sulsc\\.org/(|wordpress/)\\?page_id=[0-9]+","gi");
    page_xml = XML(rss_raw);
    post_xml = XML(rss_raw);
    rss_xml = null;
    for (var i:uint; i<post_xml.channel.item.length(); i++)
    {
        if (page_test.test(post_xml.channel.item[i]) == true)
        {
            post_xml.channel.item[i] = "";
            i--;
        }
        if (i == post_xml.channel.item.length()-1)
        {
            rss_loader.bytesLoaded = 113 * 1024;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

去年我与一个项目遇到了类似的问题。事实证明服务器没有返回正确的标头以供Flash接收。遗憾的是,我不记得填充bytesTotal需要哪个标题,但我确实提出了一个快速的解决方法。

this.urlLoader.addEventListenever( HTTPStatusEvent.HTTP_RESPONSE_STATUS, this.statusResponse );

private function statusResponse(e:HTTPStatusEvent = null):void{
    for ( var i:Number = 0; i < e.responseHeaders.length; i++ ) {
        var current:Object = e.responseHeaders[i];
        if ( current.name.toLowerCase() == "content-length" ) {
            this.bytesTotal = current.value;
            break;
        }
    }
}

这对我有用,虽然它显然依赖于服务器发送Content-Length标题。