Задать вопрос
@66demon666
Сетевой админ, АТС-админ

API ВКонтакте. Не до конца получает user_id. Что делать?

Пытаюсь работать с API ВКонтакте через VB.NET. получаю данные: access_token и user_id. Вот этим способом
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        WebBrowser1.Navigate("http://api.vkontakte.ru/oauth/authorize?client_id=" & appID & "&scope=wall" & "&display=popup&response_type=token")


После каждого успешного получения данных (когда access_token<>"" и когда user_id<>"") появляется MessageBox с сообщением об успешном получении например access_token и собственно сам ключ.
b833572b0ad6485a99398afc82dcf9e8.png

Та же история с user_id. Только о мне выдал только первые 3 цифры. Вот как я получал ключ и идентификатор

Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        If e.Url.ToString().IndexOf("access_token") <> -1 Then
            access_token = GetBetween(e.Url.ToString(), "access_token=", "&expires", 0)
        End If
        If access_token <> "" Then
            MsgBox("Ключ доступа успешно получен. " & access_token)

        End If
        MsgBox(getProfiles("adam_moran").InnerXml)

        If e.Url.ToString().IndexOf("user_id") <> -1 Then
            user_id = GetBetween(e.Url.ToString(), "user_id=", 0)
        End If
        If user_id <> "" Then
            MsgBox("id получен. " & user_id)

        End If

    End Sub


И вот

fdd2c28ef77d461fa9234b6a657fd119.png

первые 3 цифры от реального. Помогите пожалуйста.
  • Вопрос задан
  • 2655 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@OvLab
>>В исходной строке user_id полностью?
>>В таком случае ошибка в параметрах функции GetBetween.

Во-первых, исправляем функцию, чтобы она правильно обрабатывала последний в строке токен - добавляем дополнительное условие на случай, если strEnd пустой:
Public Function GetBetween(ByRef strSource As String, ByRef strStart As String, ByRef strEnd As String, Optional ByRef startPos As Integer = 0) As String
  Dim iPos As Integer, iEnd As Integer, lenStart As Integer = strStart.Length
  Dim strResult As String

  strResult = String.Empty
  iPos = strSource.IndexOf(strStart, startPos)
  iEnd = strSource.IndexOf(strEnd, iPos + lenStart)
  If iPos -1 AndAlso iEnd <> -1 Then
    If strEnd.Length>0 Then
        strResult = strSource.Substring(iPos + lenStart, iEnd - (iPos + lenStart))    
    Else
        strResult = strSource.Substring(iPos + lenStart, strSource.Length-(iPos + lenStart))        
    End If
  End If
  Return strResult
End Function


Во-вторых, исправляем вызов функции, явно передавая в качестве strEnd пустую строку:

If e.Url.ToString().IndexOf("user_id") <> -1 Then
            user_id = GetBetween(e.Url.ToString(), "user_id=","", 0)
End If
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы