markhneedham / altnet-sydney-fsharp

Code from my F# presentation at the Alt.NET Sydney user group

commit 0: dfcbc2acf486
branch: default
tags: tip
code from altnet-sydney presentation
Adm...@mark-77a21e9718.localdomain
9 months ago
altnet-sydney-fsharp / BeforeObjects.fs
r0:dfcbc2acf486 40 loc 2.0 KB embed / history / annotate / raw /
#light
 
open Dimebrain.TweetSharp.Fluent
open Dimebrain.TweetSharp.Extensions
open Dimebrain.TweetSharp.Model
open Microsoft.FSharp.Core.Operators 
open MarkFSharp
 
let getStatusesBefore (statusId:int64) = FluentTwitter.CreateRequest().AuthenticateAs(Config.user, Config.password).Statuses()
                                            .OnFriendsTimeline().Before(statusId).AsJson().Request().AsStatuses()
                                            
let getLatestStatuses  = FluentTwitter.CreateRequest().AuthenticateAs(Config.user, Config.password).Statuses().OnFriendsTimeline()
                            .AsJson().Request().AsStatuses()                                               
 
let withLinks (statuses:seq<Dimebrain.TweetSharp.Model.TwitterStatus>) = 
    statuses |> Seq.filter (fun eachStatus -> eachStatus.Text.Contains("http"))
 
let print (statuses:seq<Dimebrain.TweetSharp.Model.TwitterStatus>) =
    for status in statuses do
        printfn "[%s] %s" status.User.ScreenName status.Text    
                                  
let findOldestStatus (statuses:seq<Dimebrain.TweetSharp.Model.TwitterStatus>) = 
    statuses |> Seq.sortBy (fun eachStatus -> eachStatus.Id) |> Seq.hd
 
let oldestStatusId = (getLatestStatuses |> findOldestStatus).Id  
 
let rec findLinks (args:int64 * int * int) =
    match args with
    | (_, numberProcessed, recordsToSearch) when numberProcessed >= recordsToSearch -> ignore
    | (0L, numberProcessed, recordsToSearch) -> 
        let latestStatuses = getLatestStatuses
        (latestStatuses |> withLinks) |> print
        findLinks(findOldestStatus(latestStatuses).Id, numberProcessed + 20, recordsToSearch)    
    | (lastId, numberProcessed, recordsToSearch) ->  
        let latestStatuses = getStatusesBefore lastId
        (latestStatuses |> withLinks) |> print
        findLinks(findOldestStatus(latestStatuses).Id, numberProcessed + 20, recordsToSearch)

// to get the tweets run this  
let findStatusesWithLinks recordsToSearch =
    findLinks(0L, 0, recordsToSearch) |> ignore