· 7 years ago · Feb 28, 2018, 11:40 AM
1// Requires Linq To Twitter Nuget to be added to query in Linqpad
2//
3
4// I run this first commented section after going to apps.twitter.com and registering for a new app. Get the ConsumerKey and ConsumerSecret from apps.twitter.com and fill in the following variables:
5
6string consumerKey = "--your key--";
7string consumerSecret = "--your secret--";
8
9// ###--- UNCOMMENT AND RUN THIS SECTION FIRST ---###
10//
11//var auth = new PinAuthorizer()
12//{
13// CredentialStore = new InMemoryCredentialStore
14// {
15// ConsumerKey = consumerKey,
16// ConsumerSecret = consumerSecret
17// },
18// GoToTwitterAuthorization = pageLink => Process.Start(pageLink),
19// GetPin = () =>
20// {
21// Console.WriteLine(
22// "\nAfter authorizing this application, Twitter " +
23// "will give you a 7-digit PIN Number.\n");
24// Console.Write("Enter the PIN number here: ");
25// return Console.ReadLine();
26// }
27//};
28//
29//await auth.AuthorizeAsync();
30//
31//auth.CredentialStore.Dump();
32
33// ###--- AFTER RUNNING THE ABOVE SECTION, Take the OAuthToken and OAuthTokenSecret from the dumped CredentialStore when you run the code above and fill out the two variables below:
34
35string ot = "Your OAuthToken";
36string ots = "Your OAuthTokenSecret";
37
38
39// ###--- AFTER RUNNING SECTION 1, COMMENT IT OUT AND UNCOMMENT AND RUN THIS SECTION SECOND ---###
40
41
42//var twitterCtx = new TwitterContext(new PinAuthorizer()
43//{
44// CredentialStore = new InMemoryCredentialStore()
45// {
46// ConsumerKey = consumerKey,
47// ConsumerSecret = consumerSecret,
48// OAuthToken = ot,
49// OAuthTokenSecret = ots
50// },
51//
52//});
53//
54//int count = 50;
55//string cursor = "";
56//List<DMEvent> allDmEvents = new List<DMEvent>();
57//
58//// you don't have a valid cursor until after the first query
59//DirectMessageEvents dmResponse =
60// await
61// (from dm in twitterCtx.DirectMessageEvents
62// where dm.Type == DirectMessageEventsType.List &&
63// dm.Count == count
64// select dm)
65// .SingleOrDefaultAsync();
66//
67//allDmEvents.AddRange(dmResponse.Value.DMEvents);
68//cursor = dmResponse.Value.NextCursor;
69//
70//while (!string.IsNullOrWhiteSpace(cursor))
71//{
72// dmResponse =
73// await
74// (from dm in twitterCtx.DirectMessageEvents
75// where dm.Type == DirectMessageEventsType.List &&
76// dm.Count == count &&
77// dm.Cursor == cursor
78// select dm)
79// .SingleOrDefaultAsync();
80//
81// allDmEvents.AddRange(dmResponse.Value.DMEvents);
82// cursor = dmResponse.Value.NextCursor;
83//}
84//
85//if (!allDmEvents.Any())
86//{
87// Console.WriteLine("No items returned");
88// return;
89//}
90//
91//List<string[]> Output = new List<string[]>();
92//
93//allDmEvents.ForEach(evt =>
94//{
95// MessageCreate msgCreate = evt.MessageCreate;
96//
97// if (evt != null && msgCreate != null)
98// {
99// Output.Add(new string[] { evt.CreatedAt.ToString(), (msgCreate.SenderID ?? "None"), (msgCreate.Target?.RecipientID ?? "None"), (msgCreate.MessageData?.Text ?? "None") });
100//
101// }
102//});
103//
104//var IDs = Output.Select(x => x[1]).Distinct().Union(Output.Select(x => x[2]).Distinct()).ToArray();
105//
106//Dictionary<string,string> Users = new Dictionary<string, string>();
107//
108//var userResponse =
109// await
110// (from user in twitterCtx.User
111// where user.Type == UserType.Lookup &&
112// user.UserIdList == String.Join(",", IDs)
113// select user)
114// .ToListAsync();
115//
116//if (userResponse != null)
117//{
118// Users = userResponse.Select(x => new { x.UserIDResponse, x.ScreenNameResponse }).ToDictionary(x => x.UserIDResponse, x => x.ScreenNameResponse);
119//}
120//
121//var Results = Output.Select(x => new
122//{
123// Created = x[0],
124// From = Users[x[1]],
125// To = Users[x[2]],
126// Message = x[3]
127//});
128//
129//Results.Dump();