Агрегатор Atom API Twitter с C # - PullRequest
       33

Агрегатор Atom API Twitter с C #

0 голосов
/ 19 октября 2011

Моя проблема в том, что я унаследовал запуск сайта с тикером в Твиттере, размещенным как абсолютный нижний колонтитул на странице.Администрация решила, что они не хотят, чтобы какие-либо ретвиты или @ упоминания были включены в канал.Я вижу, что канал агрегируется через Atom RSS.Я пытался просто изменить условия поиска, URL-адрес твиттера в коде C # и весь сайт завис.

К сожалению, я совершенно незнаком с C #, поэтому моя способность изменять этот код ограничена,в лучшем случае.

Веб-сайт создан с включениями для верхнего колонтитула, нижнего колонтитула, панели Twitter и т. Д.

Кроме того, запланированный запуск сайта состоится сегодня вечером в COB, поэтому готовится еще один плагинс нуля на самом деле не вариант.

Тикер вызывается на странице с этим (в коде отсутствуют открывающие и закрывающие скобки комментария, поэтому он будет отображаться здесь):

com.omniupdate.div label="ticker" path="/z-omniupdate/fakes/bfeo/2012/ticker.html"      
bf2012:ticker runat="server"     
/com.omniupdate.div 

CSS это:

    #ticker{
    width: 100%;
    height: 43px;
    border-top: 1px solid #939241;
    background: #bdcc2a url('/bfeo/2012/img/tweet-bg.gif') 0 0 repeat-x;
    background: -moz-linear-gradient(#bdcc2a, #a9b625);
    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#a9b625), to(#e4c595));
    background: -webkit-linear-gradient(#bdcc2a, #a9b625); 
    background: -o-linear-gradient(#bdcc2a, #a9b625);
    position:fixed;
    z-index: 1000;
    bottom: 0;
}
    #ticker p{
        font-size: 15px;
        color: #fff;
        text-transform: uppercase;
        float: left;
        line-height: 43px;
        margin-right: 10px;
    }
.ticker-engage {
    list-style: none;
    padding: 0;
    margin: 8px 0 0 0;
    width: 108px;
    height: 28px;
    float: left;
}
    .ticker-engage li{
        display: inline;    
    }
    .ticker-engage li a{
        height: 28px;
        width: 28px;
        text-indent: -9999px;
        float: left;
        margin: 0 2px 0 0;
    }
    .ticker-engage  li a.twitter{
        background: url('/bfeo/2012/img/twitter-sm.png') 0 0 no-repeat;
    }
    .ticker-engage  li a.facebook{
        background: url('/bfeo/2012/img/facebook-sm.png') 0 0 no-repeat;
    }
    .ticker-engage  li a.youtube{
        background: url('/bfeo/2012/img/youtube-sm.png') 0 0 no-repeat;
    }
 #tweetlist{
    list-style: none;
    padding: 7px 20px 0 20px;
    height: 36px;
    width: 666px;
    float: left;
    background: url('/bfeo/2012/img/tweet-bg.gif') 0 0 repeat-x;
    background: -moz-linear-gradient(#aab726, #98a322);
    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#aab726), to(#98a322));
    background: -webkit-linear-gradient(#aab726, #98a322); 
    background: -o-linear-gradient(#aab726, #98a322);
    font-size: 12px;
}
     #tweetlist li{
        display: inline;    
    }
     #tweetlist li a:link,  #tweetlist li a:visited{
        color: #fff;
        text-decoration: none;
        font-weight: normal;
    }
     #tweetlist li a:hover, #tweetlist li a:focus{
        text-decoration: underline;
    }
     #tweetlist li span{
            color: #ffe400; 
     }

Ticker.ascx:

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="ticker.ascx.cs" Inherits="bf_controls_ticker" %>
<div id="ticker">
    <div class="wrapper clearfix">
        <p>Engage with us</p>
        <ul class="ticker-engage">
            <li><a class="facebook" target="_blank" href="http://www.facebook.com/booththinking">
                Facebook</a></li>
            <li><a class="twitter" target="_blank" href="http://twitter.com/booththinking">Twitter</a></li>
            <li><a class="youtube" target="_blank" href="http://www.youtube.com/user/BoothThinking">
                Youtube</a></li>
        </ul>
        <form id="form1" runat="server">
        <div>
            <ul id="tweetlist">
                <asp:Literal ID="Literal1" runat="server"></asp:Literal>
            </ul>
        </div>
        </form>
    </div>
</div>

ticker.ascx.cs

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml;
using System.Text;

public partial class bf_controls_ticker : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(HttpGet("http://search.twitter.com/search.atom?q=booththinking"));
        XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
        ns.AddNamespace("at", "http://www.w3.org/2005/Atom");
        ns.AddNamespace("twitter", "http://api.twitter.com/");
        XmlNodeList entries = doc.DocumentElement.SelectNodes("//at:entry", ns);
        //Response.Write(entries.Count);
        StringBuilder sb = new StringBuilder();
        foreach (XmlNode node in entries)
        {
            sb.Append(String.Format("<li><span>{2}:</span> <a href=\"{0}\">{1}</a></li>", node.ChildNodes[2].Attributes["href"].Value, node.ChildNodes[3].InnerText, node.LastChild.FirstChild.InnerText.Split(' ')[0]));
        }
        Literal1.Text = sb.ToString();
    }

    private string HttpGet(string URI)
    {
        System.Net.WebRequest req = System.Net.WebRequest.Create(URI);

        System.Net.WebResponse resp = req.GetResponse();
        if (resp == null) return null;

        System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
        string responsexml = sr.ReadToEnd().Trim();
        sr.Close();

        return responsexml;
    }
}

1 Ответ

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

Если я вас правильно понимаю, вы можете просто проверить строку для шаблона, который вы пытаетесь пропустить.

В вашем для каждого цикла попробуйте что-то вроде этого:

foreach (XmlNode node in entries)
{
    var content = node.SelectSingleNode("at:content", ns).InnerText;

    if(!content.ToLower().Contains("@somename"))
    {
        sb.Append(String.Format("<li><span>{2}:</span> <a href=\"{0}\">{1}</a></li>", node.ChildNodes[2].Attributes["href"].Value, node.ChildNodes[3].InnerText, node.LastChild.FirstChild.InnerText.Split(' ')[0]));
    }
}

взгляните на регулярные выражения для более сложного сопоставления с шаблоном

...