gpt4 book ai didi

使用 OpenID 和 OAuth 的 youtube API(或 gdata API)的 c# 示例

转载 作者:太空狗 更新时间:2023-10-29 19:42:00 27 4
gpt4 key购买 nike

是否有任何使用 OpenID 和 OAuth 的 youtube API(或 gdata API)的 c# 代码示例?

或者可能是一篇带有代码示例的帖子/文章

将 dotnetoauth 与 youtube API 结合使用的代码示例也很棒

最佳答案

在过去的 2 周中,我刚刚获得了与 YouTube 的 Oauth 连接以获得访问播放列表的授权,我可以向您发送大量有用的类(class)。我可以在这里发布部分内容,但它可以让我发布更多内容!

虽然我现在可以访问私有(private)供稿,但我无法使用 OAuth 上传视频。谷歌文档说它有效,但最后实际发布的 SDK 是去年 2 月。您可以下载源代码并编译它,但我仍然遇到问题并构建了自己的类。我最终求助于 ClientLogin 来上传视频,但其他一切都求助于 OAuth...

给我留言,告诉我你的电子邮件地址和你想要达到的目标,我会把我现在写的类(class)发给你。

这里是一些代码:首先是一个类,它执行 OAuth 签名和一些其他的东西,比如创建 header :

#Region "Imports"
Imports System.Text
Imports System.Security.Cryptography
#End Region

Public NotInheritable Class SharedOAuth

#Region "Class Declarations"
Private Const unreservedChars As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~"

Private Const OAuthVersion As String = "1.0"
Private Const OAuthParameterPrefix As String = "oauth_"
Private Const OAuthParameterExclusionPrefix As String = "xoauth_"

Private Const OAuthConsumerKeyKey As String = "oauth_consumer_key"
Private Const OAuthCallbackKey As String = "oauth_callback"
Private Const OAuthVersionKey As String = "oauth_version"
Private Const OAuthSignatureMethodKey As String = "oauth_signature_method"
Private Const OAuthSignatureKey As String = "oauth_signature"
Private Const OAuthTimestampKey As String = "oauth_timestamp"
Private Const OAuthNonceKey As String = "oauth_nonce"
Private Const OAuthTokenKey As String = "oauth_token"
Private Const OAuthTokenSecretKey As String = "oauth_token_secret"
#End Region

#Region "Constructor"
Private Sub New()
'prevent construction
End Sub
#End Region


#Region "Shared Functions"
Public Shared Function GetSignatureTypeNameFromType(ByVal signatureType As enumerations.OAuthEnumerations.SignatureTypes) As String
Select Case signatureType
Case enumerations.OAuthEnumerations.SignatureTypes.HmacSha1
Return "HMAC-SHA1"
Case Else
Return String.Empty
End Select
End Function

Public Shared Function GenerateTimeStamp() As String
'Implementation of UNIX current UTC time
Dim _ts As TimeSpan = DateTime.UtcNow - New DateTime(1970, 1, 1, 0, 0, 0, 0)
Return Convert.ToInt64(_ts.TotalSeconds).ToString(CultureInfo.InvariantCulture)
End Function

Public Shared Function GenerateNonce() As String
'Some random Number
Return New Random().Next(123400, 9999999).ToString
End Function

Public Shared Function UrlEncode(ByVal value As String) As String
Dim _result As New StringBuilder

If (String.IsNullOrEmpty(value)) Then
Return value
End If

For Each _symbol As Char In value
If unreservedChars.IndexOf(_symbol) <> -1 Then
_result.Append(_symbol)
Else
_result.Append(String.Format("%{0}", String.Format("{0:X2}", Asc(_symbol))))
End If
Next

Return _result.ToString
End Function

''' <summary>
'''Generates a signature using the specified signatureType
''' </summary>
''' <param name="url">The full url that needs to be signed including its non OAuth url parameters</param>
''' <param name="consumerKey">The consumer key</param>
''' <param name="consumerSecret">The consumer seceret</param>
''' <param name="token">The token, if available. If not available pass null or an empty string</param>
''' <param name="tokenSecret">The token secret, if available. If not available pass null or an empty string</param>
''' <param name="httpMethod">The http method used. Must be a valid HTTP method verb (POST,GET,PUT, etc)</param>
''' <param name="signatureType">The type of signature to use</param>
''' <returns>A base64 string of the hash value</returns>
Public Shared Function GenerateSignature(ByVal url As Uri, ByVal consumerKey As String, ByVal consumerSecret As String, ByVal token As String, ByVal tokenSecret As String, ByVal httpMethod As String, ByVal timeStamp As String, ByVal nonce As String, ByVal signatureType As enumerations.OAuthEnumerations.SignatureTypes, ByRef normalizedUrl As String, ByRef normalizedRequestParameters As String) As String
normalizedUrl = String.Empty
normalizedRequestParameters = String.Empty

Dim _signatureBase As String
Dim _hash As HMACSHA1

Select Case signatureType
Case enumerations.OAuthEnumerations.SignatureTypes.HmacSha1
_signatureBase = GenerateSignatureBase(url, consumerKey, token, tokenSecret, httpMethod, timeStamp, nonce, enumerations.OAuthEnumerations.SignatureTypes.HmacSha1, normalizedUrl, normalizedRequestParameters)

Dim _sb As New StringBuilder
With _sb
.Append(UrlEncode(consumerSecret))
.Append("&")

If (String.IsNullOrEmpty(tokenSecret)) Then
.Append("")
Else
.Append(UrlEncode(tokenSecret))
End If
End With

_hash = New HMACSHA1
_hash.Key = Encoding.ASCII.GetBytes(_sb.ToString)

Return GenerateSignatureUsingHash(_signatureBase, _hash)

Case Else
Throw New NotImplementedException

End Select
End Function

Public Shared Function GenerateSignatureUsingHash(ByVal signatureBase As String, ByVal hash As HashAlgorithm) As String
Return ComputeHash(hash, signatureBase)
End Function

Public Shared Function GenerateSignatureBase(ByVal url As Uri, ByVal consumerKey As String, ByVal token As String, ByVal tokenSecret As String, ByVal httpMethod As String, ByVal timeStamp As String, ByVal nonce As String, ByVal signatureType As enumerations.OAuthEnumerations.SignatureTypes, ByRef normalizedUrl As String, ByRef normalizedRequestParameters As String) As String
Dim _SignatureTypeName As String = GetSignatureTypeNameFromType(signatureType)

If String.IsNullOrEmpty(token) Then
token = String.Empty
End If

If String.IsNullOrEmpty(tokenSecret) Then
tokenSecret = String.Empty
End If

If String.IsNullOrEmpty(consumerKey) Then
Throw New ArgumentNullException("consumerKey")
End If

If String.IsNullOrEmpty(httpMethod) Then
Throw New ArgumentNullException("httpMethod")
End If

If String.IsNullOrEmpty(_SignatureTypeName) Then
Throw New ArgumentNullException("SignatureType")
End If

normalizedUrl = String.Empty
normalizedRequestParameters = String.Empty

Dim _params As List(Of QueryParameter) = getqueryparameters(url.Query)

With _params
.Add(New QueryParameter(OAuthVersionKey, OAuthVersion))
.Add(New QueryParameter(OAuthNonceKey, nonce))
.Add(New QueryParameter(OAuthTimestampKey, timeStamp))
.Add(New QueryParameter(OAuthSignatureMethodKey, _SignatureTypeName))
.Add(New QueryParameter(OAuthConsumerKeyKey, consumerKey))

If Not (String.IsNullOrEmpty(token)) Then
.Add(New QueryParameter(OAuthTokenKey, token))
End If

.Sort(New QueryParameterComparer)
End With

normalizedUrl = String.Format("{0}://{1}", url.Scheme, url.Host)

If Not ((url.Scheme = "http" AndAlso url.Port = 80) OrElse (url.Scheme = "https" AndAlso url.Port = 443)) Then
normalizedUrl = String.Format("{0}:{1}", normalizedUrl, url.Port)
End If

normalizedUrl = String.Format("{0}{1}", normalizedUrl, url.AbsolutePath)

normalizedRequestParameters = NormalizeRequestParameters(_params)

Dim _sb As New StringBuilder
With _sb
.AppendFormat(CultureInfo.InvariantCulture, "{0}&", httpMethod.ToUpper)
.AppendFormat(CultureInfo.InvariantCulture, "{0}&", UrlEncode(normalizedUrl))
.AppendFormat(CultureInfo.InvariantCulture, "{0}", UrlEncode(normalizedRequestParameters))
End With

Return _sb.ToString

End Function
#End Region

#Region "Private Methods"
Private Shared Function ComputeHash(ByVal hashAlgorithm As HashAlgorithm, ByVal data As String) As String
If hashAlgorithm Is Nothing Then
Throw New ArgumentNullException("hashAlgorithm")
End If

If String.IsNullOrEmpty(data) Then
Throw New ArgumentNullException("data")
End If

Dim _dataBuffer As Byte() = Encoding.ASCII.GetBytes(data)
Dim _hashBytes As Byte() = hashAlgorithm.ComputeHash(_dataBuffer)

Return Convert.ToBase64String(_hashBytes)
End Function


Private Shared Function NormalizeRequestParameters(ByVal parameters As IList(Of QueryParameter)) As String

Dim _p As QueryParameter
Dim _sb As New StringBuilder

For i As Integer = 0 To parameters.count - 1
_p = parameters(i)
_sb.AppendFormat(CultureInfo.InvariantCulture, "{0}={1}", _p.Name, _p.Value)

If i < parameters.count - 1 Then
_sb.Append("&")
End If
Next

Return _sb.ToString

End Function

Private Shared Function GetQueryParameters(ByVal parameters As String) As List(Of QueryParameter)
If (parameters.StartsWith("?")) Then
parameters = parameters.Remove(0, 1)
End If

Dim _result As New List(Of QueryParameter)
Dim _p As String() = parameters.Split("&"c)

Dim _temp As String()

If Not (String.IsNullOrEmpty(parameters)) Then

For Each s As String In _p
If Not (String.IsNullOrEmpty(s)) AndAlso Not (s.StartsWith(OAuthParameterExclusionPrefix)) Then 'AndAlso (s.StartsWith(OAuthParameterPrefix)) Then
If s.IndexOf("=") > -1 Then
_temp = s.Split("="c)
_result.Add(New QueryParameter(_temp(0), _temp(1)))
Else
_result.Add(New QueryParameter(s, String.Empty))
End If
End If

Next

End If

Return _result

End Function
#End Region


End Class

然后,我使用这是一个包装类来帮助简化调用:

  Public Function SignCommandUrl(ByVal commandUrl As String) As String
Return SignCommandUrl(commandUrl, Nothing, Nothing)
End Function

Public Function SignCommandUrl(ByVal commandUrl As String, ByVal overrideToken As String, ByVal overrideTokenSecret As String) As String
Dim _commandUri = New Uri(commandUrl)
Dim _oAuthSignature As String
Dim _oAuthTimeStamp As String = SharedOAuth.GenerateTimeStamp
Dim _oAuthNOnce As String = SharedOAuth.GenerateNonce
Dim _oAuth_normalized_url As String = String.Empty
Dim _oAuth_normalized_params As String = String.Empty

If Not (String.IsNullOrEmpty(overrideToken)) OrElse Not (String.IsNullOrEmpty(overrideTokenSecret)) Then
_oAuthSignature = SharedOAuth.GenerateSignature(_commandUri, CONSUMER_KEY, CONSUMER_SECRET, overrideToken, overrideTokenSecret, "GET", _oAuthTimeStamp, _oAuthNOnce, enumerations.OAuthEnumerations.SignatureTypes.HmacSha1, _oAuth_normalized_url, _oAuth_normalized_params)
Else

If MasterAccessToken Is Nothing Then
_oAuthSignature = SharedOAuth.GenerateSignature(_commandUri, CONSUMER_KEY, CONSUMER_SECRET, String.Empty, String.Empty, "GET", _oAuthTimeStamp, _oAuthNOnce, enumerations.OAuthEnumerations.SignatureTypes.HmacSha1, _oAuth_normalized_url, _oAuth_normalized_params)
Else
_oAuthSignature = SharedOAuth.GenerateSignature(_commandUri, CONSUMER_KEY, CONSUMER_SECRET, SharedOAuth.UrlEncode(MasterAccessToken.Token), MasterAccessToken.TokenSecret, "GET", _oAuthTimeStamp, _oAuthNOnce, enumerations.OAuthEnumerations.SignatureTypes.HmacSha1, _oAuth_normalized_url, _oAuth_normalized_params)
End If
End If

'Get a token
Dim _sb As New System.Text.StringBuilder
With _sb
.Append(_oAuth_normalized_url)
.Append("?")
.Append(_oAuth_normalized_params)
.Append("&")
.Append("oauth_signature")
.Append("=")
.Append(SharedOAuth.UrlEncode(_oAuthSignature))
End With

Return _sb.ToString
End Function

Public Function BuildPostHeader(ByVal commandUrl As String) As String
Dim _commandUri = New Uri(commandUrl)
Dim _oAuthTimeStamp As String = SharedOAuth.GenerateTimeStamp
Dim _oAuthNOnce As String = SharedOAuth.GenerateNonce
Dim _oAuth_normalized_url As String = String.Empty
Dim _oAuth_normalized_params As String = String.Empty
Dim _oAuthSignature As String

If MasterAccessToken Is Nothing Then
_oAuthSignature = SharedOAuth.GenerateSignature(_commandUri, CONSUMER_KEY, CONSUMER_SECRET, String.Empty, String.Empty, "POST", _oAuthTimeStamp, _oAuthNOnce, enumerations.OAuthEnumerations.SignatureTypes.HmacSha1, _oAuth_normalized_url, _oAuth_normalized_params)
Else
_oAuthSignature = SharedOAuth.GenerateSignature(_commandUri, CONSUMER_KEY, CONSUMER_SECRET, SharedOAuth.UrlEncode(MasterAccessToken.Token), MasterAccessToken.TokenSecret, "POST", _oAuthTimeStamp, _oAuthNOnce, enumerations.OAuthEnumerations.SignatureTypes.HmacSha1, _oAuth_normalized_url, _oAuth_normalized_params)
End If


Dim _sb As New System.Text.StringBuilder
With _sb
.Append("Authorization: OAuth oauth_version=""1.0"", ")
.AppendFormat("oauth_nonce=""{0}"", ", _oAuthNOnce)
.AppendFormat("oauth_timestamp=""{0}"", ", _oAuthTimeStamp)
.AppendFormat("oauth_consumer_key=""{0}"", ", CONSUMER_KEY)
.AppendFormat("oauth_token=""{0}"", ", MasterAccessToken.Token)
.Append("oauth_signature_method=""HMAC-SHA1"", ")
.AppendFormat("oauth_signature=""{0}""", _oAuthSignature)
End With

Return _sb.ToString
End Function

Public Shared Function PostRequestReturnCollection(ByVal commandUrl As String) As NameValueCollection
Dim _nameValCollection As NameValueCollection

Dim _request As HttpWebRequest = CType(WebRequest.Create(commandUrl), HttpWebRequest)

Using _response As HttpWebResponse = CType(_request.GetResponse, HttpWebResponse)
Using _reader As TextReader = New StreamReader(_response.GetResponseStream)
_nameValCollection = HttpUtility.ParseQueryString(_reader.ReadToEnd)
End Using
End Using

Return _nameValCollection
End Function

关于使用 OpenID 和 OAuth 的 youtube API(或 gdata API)的 c# 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com