Skip to content

Instantly share code, notes, and snippets.

View jasongaylord's full-sized avatar
⏲️
Trying to find time to code.

Jason N. Gaylord jasongaylord

⏲️
Trying to find time to code.
View GitHub Profile
public interface ITwitterService
{
string ObtainBearerToken(string consumerKey, string consumerSecret);
Task<List<Tweet>> RetrieveTweetsAsync(TwitterOptions options);
}
public class Tweet
{
public string Username { get; set; }
public string Message { get; set; }
public string Avatar { get; set; }
public string Timestamp { get; set; }
public string Id { get; set; }
}
public class TweetRaw
{
public string id_str { get; set; }
public string text { get; set; }
public string created_at { get; set; }
public string in_reply_to_screen_name { get; set; }
public UserRaw user { get; set; }
}
public class UserRaw
public class Token
{
public string access_token { get; set; }
}
public class TwitterOptions
{
[Required]
public string ConsumerKey { get; set; } = "";
[Required]
public string ConsumerSecret { get; set; } = "";
public string Username { get; set; }
}
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.3" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Version="2.1.3" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.1.1" />
public class RetrieveTweetsViewComponent : ViewComponent
{
protected TwitterOptions TwitterOptions { get; private set; }
public RetrieveTweetsViewComponent(IOptions<TwitterOptions> options = null)
{
if (options != null)
TwitterOptions = options.Value;
else
TwitterOptions = new TwitterOptions();
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection.Extensions;
using TwitterViewComponent;
namespace Microsoft.Extensions.DependencyInjection
{
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddTwitter(this IServiceCollection services, IConfiguration configuration = null)
{
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
@await Component.InvokeAsync("RetrieveTweets", new { })
{
"TwitterOptions": {
"Username": "jgaylord",
"ConsumerKey": "YOUR_KEY",
"ConsumerSecret": "YOUR_SECRET"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}