I would like to display Bing Map for different locations not only office/store/branch/facilities but also can be used for an list items as long as each item has Latitude and Longitude fields.
More coming soon...
More coming soon...
//Bing controller to get news from Bing search API using Integration.Bing; using log4net; namespace SiteAPI.Controllers { public class BingController : ApiController { private readonly ILog _log = LogManager.GetLogger("SiteAPI"); private const string RootUrl = "https://api.datamarket.azure.com/Bing/Search"; private const string Market = "en-us"; private const string NewsCategory = "rt_ScienceAndTechnology"; public ListGetBingNews(string Query) { try { if (_log.IsDebugEnabled) { _log.Debug("Calling GetBingNews"); } return Integration.Bing.BnHelper.GetBingNews(Query, RootUrl, Market, NewsCategory); } catch (Exception ex) { _log.Error(ex.Message, ex); //Throw custom exception to the caller throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError) { Content = new StringContent("An error occurred, please try again or contact the administrator."), ReasonPhrase = "Critical Exception" }); } } } }
//Bing News function _initBingNews(query) { var bnfeed = $('#bing-news-feed'); // get Bing News from api function __getBingNews(callback) { var apiUri = 'https://{enteryoursite}.azurewebsites.net/api/bing/GetBingNews?Query='; $.ajax({ url: apiUri + query, type: 'GET', success: function (result) { callback(result); }, error: function () { //bnFeed.closest('.ms-webpartzone-cell').hide(); } }); } // format the data returned from the bing search api function __processBingNews(posts) { var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; var bingNewsHtml = ''; var title; var description; var link; var source; var date; var post; for (var post in posts) { title = posts[post].ContentTitle; description = posts[post].ContentDescription; link = posts[post].ContentUrl; date = posts[post].ContentDate.match(/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/); date = formatDate( date[2], date[3], date[1]); if (title.length > 0) { if (link != null) { post = '
//Bing News Feed
//1. Twitter controller to get tweets only and write to azure db using LinqToTwitter; using Microsoft.WindowsAzure; using log4net; namespace SiteAPI.Controllers { public class TwitterController : ApiController { private readonly ILog _log = LogManager.GetLogger("SiteAPI"); public string GetNewMaxIDandUpdateDB(string username, ulong sinceID = 544516702412723892) { try { if (_log.IsDebugEnabled) { _log.Debug("Calling GetNewMaxIDandUpdateDB"); } return Integration.Twitter.TwDbHelper.GetNewMaxIDandUpdateDB(username, sinceID); } catch (Exception ex) { _log.Error(ex.Message, ex); //Throw custom exception to the caller throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError) { Content = new StringContent("An error occurred, please try again or contact the administrator."), ReasonPhrase = "Critical Exception" }); } } } }
//2. Twitter Database controller to get tweets from azure db using LinqToTwitter; using Core.Domain; namespace SiteAPI.Controllers { public class TwitterDBController : ApiController { public ICollectionGetTweetsOnlyFeedFromDB(string username) { return Integration.Twitter.TwDbHelper.GetTweetsOnlyFeedFromDB(username); } } }
//twitter Feed function _inittwitterFeed(userName) { var twFeed = $('#twitter-feed'); // get twitter posts from api function __gettwitterPosts(callback) { var apiUri = 'https://{enteryoursite}.azurewebsites.net/api/twitterdb/GetTweetsOnlyFeedFromDB?username='; $.ajax({ url: apiUri + userName, type: 'json', success: function (result) { callback(result); }, error: function () { //twFeed.closest('.ms-webpartzone-cell').hide(); } }); } // format the data returned from the twitter api function __processtwitterPosts(posts) { var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; var twitterPostsHtml = ''; var profileImage; var link; var title; var date; var post; for (var post in posts) { title = posts[post].Text; profileImage = posts[post].ProfileImageUrlHttps; link = '//twitter.com/' + posts[post].ScreenName + '/status/' + posts[post].StringStatusID; date = posts[post].CreatedAt.match(/([0-9]{4})\-([0-9]{1,2})\-([0-9]{1,2})/); date = date[3] + ' ' + months[date[2] - 1] + ' ' + date[1]; if (profileImage.length > 0) { if (link != null) { post = '
//twitter Feed
//Helper class using Newtonsoft.Json; using System; namespace Integration.Facebook { public static class FbHelper { //returns Facebook Feed public static ICollection< FbFeedItem > ReadFeed(string fbUserId, string accessToken) { /*** * Graph API v2.4 * /{user-id}/feed * The feed of posts (including status updates) and links published by this person, or by others on this person's profile. There are other edges which provide filtered versions of this edge: * /{user-id}/links shows only the links that were published by this person. * /{user-id}/posts shows only the posts that were published by this person. * /{user-id}/statuses shows only the status update posts that were published by this person. * /{user-id}/tagged shows only the posts that this person was tagged in. * ***/ //gets recent 20 user posts when limit=20 const string UriJson = "https://graph.facebook.com/v2.4/{0}/posts?fields=message,description,created_time,id,name,link,picture,from,status_type&limit=20&access_token={1}"; var returnFbFeedItems = new List< FbFeedItem >(); try { var fbJsonString = Core.Utilities.Json.GetJsonString(String.Format(UriJson, fbUserId, accessToken), null, null, true); //create a stream to hold the contents of the response and create Facebook Object var fbObject = JsonConvert.DeserializeObject< FbFeedJson >(fbJsonString); if (fbObject == null || !fbObject.Data.Any()) return returnFbFeedItems; else { if (fbObject.Data != null) { //return feed returnFbFeedItems = fbObject.Data.Select(fbItem => new FbFeedItem { Message = fbItem.Message, Description = fbItem.Description, CreatedTime = fbItem.CreatedTime, PostId = fbItem.Id, Picture = fbItem.Picture, Link = fbItem.Link, Name = fbItem.Name, FromName = fbItem.From.Name, FromId = fbItem.From.Id, StatusType = fbItem.StatusType }).ToList(); } } } catch (Exception ex) { Console.WriteLine("Error : " + ex); } return returnFbFeedItems.ToList(); } } }
//Facebook controller public class FacebookController : ApiController { public ICollection< FbFeedItem > GetFacebookFeed(string fbUserId) { return Integration.Facebook.FbHelper.ReadFeed(fbUserId); } }
//Facebook Feed function _initFacebookFeed(FbUserId) { var fbFeed = $('#facebook-feed'); // get facebook posts from api function __getFacebookPosts(callback) { var apiUri = 'https://{enteryoursite}.azurewebsites.net/api/facebook/GetFacebookFeed?fbUserId='; $.ajax({ url: apiUri + FbUserId, type: 'GET', success: function (result) { callback(result); }, error: function () { //fbFeed.closest('.ms-webpartzone-cell').hide(); } }); } // format the data returned from the facebook api function __processFacebookPosts(posts) { var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; var facebookPostsHtml = ''; var message; var link; var description; var picture; var date; var post; for (var post in posts) { message = posts[post].Message; description = posts[post].Description; link = posts[post].Link; picture = posts[post].Picture; date = date.match(/([0-9]{4})\-([0-9]{1,2})\-([0-9]{1,2})/); date = date[3] + ' ' + months[date[2] - 1] + ' ' + date[1]; if (message.length > 0) { if ( message.length > 180 ) { message = message.substring(0, 180) + '...'; } if (picture != null) { post = '
//Facebook Feed
//Instagram Helper class using Newtonsoft.Json; namespace Integration.Instagram { public class IgHelper { //returns Instagram object public static ICollection< IgFeedItem > ReadFeed(string IgUserId, string AccessToken) { //gets recent media photos; when count=3, it returns 3 recent photos const string UriJson = "https://api.instagram.com/v1/users/{0}/media/recent/?access_token={1}&count=3"; var returnIgFeedItems = new List< IgFeedItem >(); try { var IgJsonString = Core.Utilities.Json.GetJsonString(String.Format(UriJson, IgUserId, AccessToken), null, null, true); //create a stream to hold the contents of the response and create Instagram Object var IgObject = JsonConvert.DeserializeObject< IgFeedJson >(IgJsonString); if (IgObject == null || !IgObject.Data.Any()) return returnIgFeedItems; else { if (IgObject.Data != null) { //return feed returnIgFeedItems = IgObject.Data.Select(IgItem => new IgFeedItem { Caption = IgItem.Caption.Text, Link = IgItem.Link, SmallImage = IgItem.Images.LowResolution.Url, ThumbnailImage = IgItem.Images.Thumbnail.Url, LargeImage = IgItem.Images.StandardResolution.Url, Type = IgItem.Type, CreatedTime = IgItem.CreatedTime }).ToList(); } } } catch (Exception ex) { Console.WriteLine("Error : " + ex); } return returnIgFeedItems.ToList(); } } }
//Instagram controller public class InstagramController : ApiController { public ICollection< IgFeedItem > GetInstagramFeed(string IgUserId) { return Integration.Instagram.IgHelper.ReadFeed(IgUserId); } }
//Instagram Feed function _initInstagramFeed(IgUserId) { var igFeed = $('#instagram-feed'); // get instagram posts from api function __getInstagramPosts(callback) { var apiUri = 'https://{enteryoursite}.azurewebsites.net/api/instagram/GetInstagramFeed?IgUserId='; $.ajax({ url: apiUri + IgUserId, type: 'GET', success: function (result) { callback(result); }, error: function () { //igFeed.closest('.ms-webpartzone-cell').hide(); } }); } // format the data returned from the instagram api function __processInstagramPosts(posts) { var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; var instagramPostsHtml = ''; var thumbnailImage; var link; //var caption; //var smallImage; //var largeImage; //var date; //var type; var post; for (var post in posts) { //caption = posts[post].Caption; thumbnailImage = posts[post].ThumbnailImage; link = posts[post].Link; if (thumbnailImage.length > 0) { if (link != null) { post = '
//Instagram Feed