как получить доступ к значениям, возвращаемым API фида Google в загрузке страницы? - PullRequest
0 голосов
/ 25 ноября 2011

В настоящее время я использую API фидов Google для динамического получения ссылок на фиды.я пытаюсь использовать результаты, возвращаемые API для создания RSS-канала для моего веб-сайта .. Теперь проблема в том, что вызов функции API происходит только после загрузки страницы, поэтому я не могу получить доступ к значениям URL, возвращаемым API в функции загрузки страницы.

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
   <script type="text/javascript" src="https://www.google.com/jsapi?key=ABQIAAAAxII5vpTAk5gatTPIMAFoCxStIDvCAqMV0_KActMytIL1qEezxxQeBqRzIurcFfnrUgG2YMlC07VgbQ"></script>
    <script type="text/javascript">

        google.load("feeds", "1", { "callback": OnLoad });

        function OnLoad() {
            // Query for president feeds on cnn.com
            var query = 'atlanta bridal shows';
            google.feeds.findFeeds(query, findDone);
        }

        function findDone(result) {
            // Make sure we didn't get an error.
            if (!result.error) {
                // Get content div
                var content = document.getElementById('content');
                var html = '';
                var submenu = new Array()
                // Loop through the results and print out the title of the feed and link to
                // the url.
                for (var i = 0; i < result.entries.length; i++) {
                    var entry = result.entries[i];
                    html += '<p><a href="' + entry.url + '">' + entry.title + '</a></p>';
                    submenu[i] = entry.url;
                }
                content.innerHTML = html;

                document.getElementById('<%= Hidden1.ClientID %>').value = submenu;
            }
        }

        google.setOnLoadCallback(OnLoad);
    </script>

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:HiddenField ID="Hidden1" runat="server" ondatabinding="Hidden1_DataBinding" 
        onunload="Hidden1_Unload" onvaluechanged="Hidden1_ValueChanged" />
<div id="content"></div>

</asp:Content>

Событие загрузки страницы:

 protected void Page_Load(object sender, EventArgs e)
    {
        WebClient client = new WebClient();
        string path = Request.Url.GetLeftPart(UriPartial.Authority) +
               VirtualPathUtility.ToAbsolute("~/user/feed.htm");

        Stream stream = client.OpenRead(path);
        StreamReader sr = new StreamReader(stream);
        string content = sr.ReadToEnd();

          }

Что я должен сделать, чтобы получить доступ к значениям, возвращаемым API в загрузке страницы ??

1 Ответ

1 голос
/ 25 ноября 2011

Прежде всего, вам нужно создать feed.htm и поместить в него код выше.

feed.htm (находится в корне веб-приложения)

<script type="text/javascript" src="https://www.google.com/jsapi?key=ABQIAAAAxII5vpTAk5gatTPIMAFoCxStIDvCAqMV0_KActMytIL1qEezxxQeBqRzIurcFfnrUgG2YMlC07VgbQ"></script>
<script type="text/javascript">

    google.load("feeds", "1", { "callback": OnLoad });

    function OnLoad() {
        // Query for president feeds on cnn.com
        var query = 'atlanta bridal shows';
        google.feeds.findFeeds(query, findDone);
    }

    function findDone(result) {
        // Make sure we didn't get an error.
        if (!result.error) {
            // Get content div
            var content = document.getElementById('content');
            var html = '';
            var submenu = new Array()
            // Loop through the results and print out the title of the feed and link to
            // the url.
            for (var i = 0; i < result.entries.length; i++) {
                var entry = result.entries[i];
                html += '<p><a href="' + entry.url + '">' + entry.title + '</a></p>';
                submenu[i] = entry.url;
            }
            content.innerHTML = html;

            document.getElementById('<%= Hidden1.ClientID %>').value = submenu;
        }
    }

    google.setOnLoadCallback(OnLoad);
</script>
<div id="content"></div>

Затем после события page_load на странице .aspx используйте методы класса System.Net.WebClient для запроса feed.htm.

TestFeed.aspx (находится в корне веб-приложения)

Markup:

<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server"></asp:Label>
    </div>
    </form>
</body>

Код-за:

protected void Page_Load(object sender, EventArgs e)
    {
        WebClient client = new WebClient();
        string path = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/feed.htm");

        Stream stream = client.OpenRead(path);
        StreamReader sr = new StreamReader(stream);
        //To view the result
        Label1.Text = sr.ReadToEnd();
    }
...