Wenn ich die von get/messages.json zurückgegebenen Daten mit den Daten vergleichen, die über den Export in yammer abgerufen werden. get/messages.json gibt 6.300 Datensätze zurück. Der Datenexport liefert 10.469 Datensätze. Analog dazu post verwende ich auch den old_than Parameter. Es gab einen Kommentar in diesem Beitrag, der ein Ratenbegrenzungsproblem vorschlug. Ich kann Ihnen versichern, dass ich das Ratenlimit nicht überschreite, da ich nach jeweils 10 Anfragen 15 Sekunden pausiere.Yammer API get/messages.json gibt unvollständige Ergebnisse zurück
Zu meinen unvollständig 6.300 Zeilen I ...
Verwenden Sie den Export-API, um eine Liste von allen Gruppen
Schleife durch diese Liste von Gruppen zu erhalten und die Nachrichten herunterladen für Jede Gruppe mit
https://www.yammer.com/api/v1/messages/in_group/:group_id.json
Dann verwende ich
https://www.yammer.com/api/v1/messages.json
mit dem old_than-Parameter, um alle Nachrichten im Feed Alle Unternehmen zu erhalten.
Die Ausgabe erscheint mit Schritt 3
Hier zu sein ist der Code 3 im Zusammenhang oben beschriebene zu Schritt:
Sub GetAllCompanyMessages()
Try
Console.WriteLine("Getting All Company Messages")
If File.Exists(allCompanyPath) Then
'delete previous
If Directory.Exists(allCompanyPath) Then
For Each oldFile As String In Directory.GetFiles(allCompanyPath)
File.Delete(oldFile)
Next
Directory.Delete(allCompanyPath)
End If
'create dir
Directory.CreateDirectory(allCompanyPath)
Else
'create dir
Directory.CreateDirectory(allCompanyPath)
'Throw New Exception("Yammer Data Export Zip Download Failed")
End If
'get first group of messages
Console.WriteLine("Getting All Company Batch 1")
Dim client As New WebClient()
client.Headers.Add("Authorization", "Bearer " & accessToken)
client.DownloadFile(allCompanyMessagesURL, allCompanyPath & "1.json")
'getOlderThanID
Dim olderThanID As Int32 = getOlderThanID(allCompanyPath & "1.json")
'get remaining messages in batches of 20
Dim i As Int32 = 2
'Dim prevOlderThanID As Int32 = 0
Dim nextOlderThanID As Int32 = olderThanID
Do Until i = 0
Console.WriteLine("Getting All Company Batch " & i & " olderthanID " & nextOlderThanID)
client = Nothing
client = New WebClient()
client.Headers.Add("Authorization", "Bearer " & accessToken)
client.DownloadFile(allCompanyMessagesURL & "?older_than=" & nextOlderThanID, allCompanyPath & i & ".json")
'prevOlderThanID = nextOlderThanID
nextOlderThanID = getOlderThanID(allCompanyPath & i & ".json")
i = i + 1
If nextOlderThanID = 0 Then
'exit loop
i = 0
End If
' HANDLES 10 REQUESTS IN 10 SECONDS LIMIT
If i >= 10 Then
If i Mod 10 = 0 Then
' CAUSES APP TO WAIT 15 SECONDS AFTER EVERY 10th REQUEST
Console.WriteLine("Sleeping for 15 seconds")
System.Threading.Thread.Sleep(15000)
End If
End If
Loop
Console.WriteLine("Concatenating All Company Batches")
Dim masterJobject As New JObject
masterJobject = JObject.Parse("{""messages"":[]}")
For Each path As String In Directory.GetFiles(allCompanyPath, "*.json")
Console.WriteLine("Concatenating All Company Batch: " & path)
'open each json get messages object and append
Dim jObj As JObject = JObject.Parse(File.ReadAllText(path))
Dim jms As New JsonMergeSettings
'beh 5.24.17 jms.MergeArrayHandling = MergeArrayHandling.Union
jms.MergeArrayHandling = MergeArrayHandling.Concat
masterJobject.Merge(jObj, jms)
'File.Delete(path)
Next
Console.WriteLine("Building Yammer-All-Company-Messages.json")
File.WriteAllText(outputJSONpath & "Yammer-All-Company-Messages.json", "{ ""messages"":" & masterJobject("messages").ToString() & "}")
Catch ex As Exception
ErrorHandler("ERROR GetAllCompanyMessages: " & ex.Message)
End Try
End Sub
Function getOlderThanID(ByVal jsonPath As String) As Int32
Dim result As Int32 = 0
Try
Dim jObj As New JObject
jObj = JObject.Parse(File.ReadAllText(jsonPath))
If CBool(jObj("meta")("older_available")) = True Then
If Not IsNothing(jObj("messages").Last()("id")) Then
result = jObj("messages").Last()("id")
End If
End If
Catch ex As Exception
ErrorHandler("ERROR getOlderThanID: " & ex.Message)
End Try
Return result
End Function
Ich würde schätzen, nicht nur die Einsicht auf, was das Problem mit sein könnte Der get/messages.json-API-Endpunkt und wie ich meinen Code ändern könnte, um dieses Problem zu lösen.
Woher wissen Sie, wo die "Lücken" programmatisch sind? – s15199d