imgur上传到c#中经过身份验证的api

时间:2011-03-13 04:46:10

标签: c# oauth imgur

我发现有大量的C#样本上传图片,但是他们似乎都在使用匿名API。任何关于这些是否可以适应使用经过身份验证的API的想法,和/或应该使用oAuth API来执行此操作而无需启动浏览器。

我正在查看的示例(如果您搜索“C#IMGUR”,还有其他示例)在这里:http://api.imgur.com/examples#uploading_cs

然后讨论authenticated API的API部分说明了这一点:

  

要使用Authenticated API,请使用   你需要做的第一件事就是注册   申请并获得您的   消费者的关键和秘密。这个关键和   秘密方案用于OAuth   1.0a认证协议。

但是,当从WP7等移动设备与API通信时,这种情况并不明显。特别是,OAuth examples wiki .net中显示的示例使用浏览器,我希望此应用程序在后台无缝地使用imgur ...即。我为我的应用程序注册了一个帐户以便上传,因此用户不必是提供身份验证的人。

谢谢!

2 个答案:

答案 0 :(得分:0)

当您使用Oauth时,最终用户需要拥有一些imgur帐户。我刚注册,我需要登录并选择一个子域等。看来你的应用程序的最终用户需要做同样的事情才能进入Oauth部分。到目前为止,这与我对需要Oauth的API的其他用法没有太大区别。

用户拥有帐户后,他们需要通过Oauth有效地获取一组委派的凭据。这需要您获取授权URL,在浏览器中打开该URL以供用户确认他们授权您的应用程序,然后他们将获得验证者令牌以输入客户端应用程序。完成这些步骤后,客户端应用程序应具有调用API所需的所有Oauth凭据。

如果您拥有用户的cookie并且能够执行检索和输入验证码所需的HTTP请求,我认为您只能避开浏览器步骤。

答案 1 :(得分:0)

如果不是必需,则需要使用imgur,我建议您尝试yfrog

实施例

很抱歉,我没有时间做C#的例子,但这里是PHP 1:(source link

<?php

    /**
     * This example demonstrates how to use OAuth credentials of your application to upload data to yfrog
     * Usage: upload-to-yfrog-example.php <FILENAME-TO-UPLOAD>
     */

    // TODO: PUT YOUR KEYS HERE

    // your app's OAuth consumer & secret
    define('OAUTH_CONSUMER_KEY', '');
    define('OAUTH_CONSUMER_SECRET', '');

    // your app user's token and secret, when twitter user granted access to your app
    define('OAUTH_TOKEN_KEY', '');
    define('OAUTH_TOKEN_SECRET', '');

    // END OF TODO

    // you can grab required file here:
    // http://github.com/abraham/twitteroauth
    require_once('OAuth.php');

    // instantiating OAuth customer 
    $consumer = new OAuthConsumer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET);
    // instantiating signer
    $sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
    // user's token
    $token = new OAuthConsumer(OAUTH_TOKEN_KEY, OAUTH_TOKEN_SECRET);

    // signing URL
    $url = 'https://twitter.com/account/verify_credentials.xml';
    $request = OAuthRequest::from_consumer_and_token($consumer, $token, 'GET', $url, array());
    $request->sign_request($sha1_method, $consumer, $token);

    $url = $request->to_url();
    // OK, URL is signed, we can pass it to yfrog API

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://yfrog.com/api/upload');

    $post = array
    (
        'username' => 'yfrogtests', // twitter's username
        'verify_url' => $url,  // signed URL
        'media' => '@' . $argv[1], // filename
        'auth' => 'oauth',  // auth=oauth is mandatory to use verify_url method
        'message' => 'see it live on yfrog' // message to be sent, will not be posted to twitter
    );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

    $response = curl_exec($ch);
    curl_close ($ch);

    echo $response;

    // see http://twitter.com/yfrogtests

?>

修改

  

正常的流量决定了这一点   应用程序发送请求令牌   在Twitter上的oauth / authorize   OAuth的实施   说明书

enter image description here

  

访问令牌持续多长时间?

     

我们目前没有过期访问权限   令牌。您的访问令牌将是   如果用户明确拒绝,则无效   您的应用程序从他们的设置   或者如果Twitter管理员暂停你的   应用。如果您的申请是   暂停将有一个注意到你的   应用程序页面说它有   被停职了。

来源:http://dev.twitter.com/doc

您需要拥有访问令牌并获得该权限,用户需要首先批准您的应用程序 - 没有办法解决这个问题。

此外,您的应用程序在1个帐户上可以拥有的(写入)访问次数限制为每天约300次。因此,除非您的程序适用于1-3人,否则您将达到该限制。我的结论是:用户需要提供身份验证的人。