1

我找到了大量用于将图像上传到 imgur 的 C# 示例……但是它们似乎都在使用匿名 API。SO 的任何想法是否可以调整其中任何一个以使用经过身份验证的 API,和/或应该使用什么 oAuth API 来执行此操作而无需启动浏览器。

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

然后讨论经过身份验证的 API 的 API 部分说:

要使用 Authenticated API,您要做的第一件事是注册应用程序并获取您的使用者密钥和秘密。此密钥和秘密方案用于 OAuth 1.0a 身份验证协议。

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

谢谢!

4

2 回答 2

0

如果不是必需的,你需要使用imgur,那么我建议你尝试yfrog

例子

抱歉,我没有时间编写 C# 示例,但这里是 PHP 示例:(源链接

<?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 规范实现中的 oauth/authorize。

在此处输入图像描述

访问令牌持续多长时间?

我们目前不会使访问令牌过期。如果用户从他们的设置中明确拒绝您的应用程序,或者如果 Twitter 管理员暂停您的应用程序,您的访问令牌将无效。如果您的申请被暂停,您的申请页面上将会有一条说明,说明它已被暂停。

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

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

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

于 2011-03-23T10:25:48.863 回答
0

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

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

我认为只有当您拥有用户的 cookie 并且能够执行检索和输入验证程序代码所需的 HTTP 请求时,您才能避免浏览器步骤。

于 2011-03-23T03:34:52.373 回答