如何在Sitecore 6.5中嵌入最新推文

时间:2014-05-20 07:22:57

标签: sitecore

我必须在Sitecore 6.5项目中嵌入最新推文,如下图所示

enter image description here

如何实现此功能。

由于

4 个答案:

答案 0 :(得分:2)

你好你可以这样做看下面的代码。我在这里粘贴代码用于单个子布局。请根据您的要求更新一些令牌。这段代码将为您返回一个Json,您可以在JQuery中获取该json。

代码 - ----------------

public partial class LatestTweets:BaseSublayout     {         SiteItem objSiteItem = SiteItem.GetSiteRoot();         protected void Page_Load(object sender,EventArgs e)         {             if(objSiteItem!= null)             {                 hdJsonData.Value = GetTweets();                 frLatestTweets.Item = objSiteItem;                 frLatestTweets.Item = objSiteItem;                 frFollowUsLink.Item = objSiteItem;                 ltFollowUs.Text = Sitecore.Globalization.Translate.Text(Constants.FOLLOW_US);                 ltTweetUs.Text = Sitecore.Globalization.Translate.Text(Constants.TWEET_US);             }         }

    public string GetTweets()
    {

        // oauth application keys
        var oauth_token = objSiteItem.AccessToken.Rendered;
        var oauth_token_secret = objSiteItem.AccessTokenSecret.Rendered;
        var oauth_consumer_key = objSiteItem.ConsumerKey.Rendered;
        var oauth_consumer_secret = objSiteItem.ConsumerSecret.Rendered;
        var screen_name = objSiteItem.TwitterUser.Rendered;
        // oauth implementation details
        var oauth_version = "1.0";
        var oauth_signature_method = "HMAC-SHA1";

        // unique request details
        var oauth_nonce = Convert.ToBase64String(
            new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));

        var timeSpan = DateTime.UtcNow
            - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);

        var oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();

        // message api details
        var status = "Updating status via REST API if this works";

        var resource_url = "https://api.twitter.com/1.1/statuses/user_timeline.json";

        // create oauth signature
        var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" +
                        "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&screen_name={6}";

        var baseString = string.Format(baseFormat,
                                        oauth_consumer_key,
                                        oauth_nonce,
                                        oauth_signature_method,
                                        oauth_timestamp,
                                        oauth_token,
                                        oauth_version,
                                        Uri.EscapeDataString(screen_name)
                                    );

        baseString = string.Concat("GET&", Uri.EscapeDataString(resource_url), "&", Uri.EscapeDataString(baseString));

        var compositeKey = string.Concat(Uri.EscapeDataString(oauth_consumer_secret),
                                "&", Uri.EscapeDataString(oauth_token_secret));

        string oauth_signature;

        using (HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey)))
        {
            oauth_signature = Convert.ToBase64String(hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString)));
        }

        // create the request header
        var headerFormat = "OAuth oauth_nonce=\"{0}\", oauth_signature_method=\"{1}\", " +
                           "oauth_timestamp=\"{2}\", oauth_consumer_key=\"{3}\", " +
                           "oauth_token=\"{4}\", oauth_signature=\"{5}\", " +
                           "oauth_version=\"{6}\"";

        var authHeader = string.Format(headerFormat,
                                Uri.EscapeDataString(oauth_nonce),
                                Uri.EscapeDataString(oauth_signature_method),
                                Uri.EscapeDataString(oauth_timestamp),
                                Uri.EscapeDataString(oauth_consumer_key),
                                Uri.EscapeDataString(oauth_token),
                                Uri.EscapeDataString(oauth_signature),
                                Uri.EscapeDataString(oauth_version)
                        );

        // make the request
        ServicePointManager.Expect100Continue = false;

        var postBody = "screen_name=" + Uri.EscapeDataString(screen_name);//
        resource_url += "?" + postBody;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource_url);
        request.Headers.Add("Authorization", authHeader);
        request.Method = "GET";
        request.ContentType = "application/x-www-form-urlencoded";

        WebResponse response = request.GetResponse();
        string responseData = new StreamReader(response.GetResponseStream()).ReadToEnd();
        return responseData;
    }
}

答案 1 :(得分:1)

就像你将它添加到任何网站一样......为它创建一个组件并使用这样的twitter API,例如:http://jsfiddle.net/abenlumley/xRwam/4/

/*********************************************************************
  #### Twitter Post Fetcher! ####
  Coded by Jason Mayes 2013.
  www.jasonmayes.com
  Please keep this disclaimer with my code if you use it. Thanks. :-)
  Got feedback or questions, ask here: http://goo.gl/JinwJ

  Ammended by Ben Lumley and djb31st 2013
  www.dijitul.com
  Ammended to display latest tweet only with links
********************************************************************/
var twitterFetcher=function(){var d=null;return{fetch:function(a,b){d=b;var c=document.createElement("script");c.type="text/javascript";c.src="http://cdn.syndication.twimg.com/widgets/timelines/"+a+"?&lang=en&callback=twitterFetcher.callback&suppress_response_codes=true&rnd="+Math.random();document.getElementsByTagName("head")[0].appendChild(c)},callback:function(a){var b=document.createElement("div");b.innerHTML=a.body;a=b.getElementsByClassName("e-entry-title");d(a)}}}();

/*
* ### HOW TO USE: ###
* Create an ID:
* Go to www.twitter.com and sign in as normal, go to your settings page.
* Go to "Widgets" on the left hand side.
* Create a new widget for "user timeline". Feel free to check "exclude replies"
* if you dont want replies in results.
* Now go back to settings page, and then go back to widgets page, you should
* see the widget you just created. Click edit.
* Now look at the URL in your web browser, you will see a long number like this:
* 345735908357048478
* Use this as your ID below instead!
*/

twitterFetcher.fetch('345190342812909568', function(tweets){
  // Do what you want with your tweets here! For example:
  var x = tweets.length;
  var n = 0;
  var element = document.getElementById('tweets');
  var html = '<ul>';
    if (tweets[n].innerHTML) {
      html += '<li>' + tweets[n].innerHTML + '</li>';
    } else {
      html += '<li>' + tweets[n].textContent + '</li>';
    }
    n++;
  html += '</ul>';
  element.innerHTML = html;
});

答案 2 :(得分:0)

正如@IvanL所说,你只需要创建一个子布局并像往常一样添加标记/ JS / etc。下面,我将介绍一个易于使用的库,它将帮助您通过Twitter的API获取推文以及jQuery插件,这将有助于简化您呈现它们的方式。您需要做的就是连接库,进行必要的C#调用,然后使用jQuery插件帮助您使用指定的标记样式呈现推文。

如下所述,请注意我最初编写了库和jQuery插件,以便与Sitecore 6.5环境集成,并使它们足够灵活,可以与任何解决方案一起使用。

获取和渲染推文

我在一年前为Twitter API创建了一个名为TweetNET的C#库。它有MSDN样式文档,我以可以集成到.NET应用程序中的方式构建它,我使用它的第一个生产站点是Sitecore 6.5站点。文档和示例非常全面,但如果您有任何疑问,请随时告诉我。

至于从Twitter获取推文之后实际显示的推文,我还有另一个回购,Twitter Feed,这是一个jQuery插件,旨在简化呈现推文。这两个项目都包含TweetNET的使用示例,Twitter Feed项目还包括其调用的示例,因此这将是一站式服务。


TweetNET - 最新推文致电

TweetNET减少了您需要的代码,以便获取以下给定句柄的最新推文:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TweetNET.OAuth;
using TweetNET.Requests.Timelines.Statuses;
using System.Net;
using System.IO;

public partial class _Default : System.Web.UI.Page {
    protected void Page_Load(object sender, EventArgs e) {
        var consumerKey = "your consumerKey";
        var consumerSecret = "your consumerSecret";
        var oAuthToken = "your oAuthToken";
        var oAuthTokenSecret = "your oAuthTokenSecret";

        var twitterHandle = "your twitter handle";

        var tokens = new SecurityTokens(consumerKey, consumerSecret, oAuthToken, oAuthTokenSecret);

        var utGETRequest = new UserTimelineRequest(tokens);
        utGETRequest.Screen_Name = twitterHandle;

        var request = utGETRequest.BuildRequest();
        WebResponse response = utGETRequest.SendRequest(request);
        string responseData = new StreamReader(response.GetResponseStream()).ReadToEnd();
    }
}


Twitter Feed - 渲染推文

$(document).ready(function () {
        $("#feedTarget").twitterFeed({
                count: 4,
                rawData: yourRawJSONData,
                prepend: "<div class='tweetWrapper'>", 
                append: "</div>",
                tweetBodyClass: "tweetBody tweetText",
                date: { prepend: "<div>", append: " - ", order: 3, cssClass: "tweetDate" },
                retweet: { show: false },
                favorite: { prepend: " - ", order: 0, append: "</div>" },
                callbackOnEach: true,
                callback: function() { 
                $(this).find(".tweetBody").myCallbackOnEachTweet(); 
            }
          });
    });
});

答案 3 :(得分:0)

要获取最新推文,请阅读以下网址

https://umerpasha.wordpress.com/2013/06/13/c-code-to-get-latest-tweets-using-twitter-api-1-1/