- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要将图片发布到 Tumblr。我读了这个http://www.tumblr.com/docs/en/api/v2#auth我开始知道我需要获取用户信息才能获取博客名称。我使用了用于 Twitter 身份验证的相同代码,更改了 URL 并成功加载了 Tumblr webview。我使用以下代码进行身份验证并获取用户信息。
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.twitter.imageupload.R;
import com.twitter.imageupload.SecondClass;
import com.twitter.imageupload.TwitterImageUpload;
import oauth.signpost.OAuth;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.OAuthProvider;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthProvider;
import oauth.signpost.http.HttpParameters;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import twitter4j.http.AccessToken;
import twitter4j.http.OAuthAuthorization;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Window;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.Toast;
public class Tumblr_Web_View extends Activity {
SharedPreferences settings;
public static final String PREFS_NAME = "GREATEST_THINGS";
SharedPreferences.Editor editor;
final String TAG = getClass().getName();
Button cancel_button;
public static String usr_img, log_res, log_id;
private OAuthConsumer consumer;
private OAuthProvider provider;
WebView tumblr_web_view;
String tweet_Sign_in;
static twitter4j.Twitter twitter;
public static String userName;
public static URL twt_img_url;
AccessToken accessToken;
SharedPreferences twtuname_pref;
SharedPreferences userpref;
public static final String USER_PREF = "TWITTER_USER";
SharedPreferences.Editor usereditor;
SharedPreferences twtlogpref;
public static SharedPreferences.Editor twtlogeditor;
public static final String TWTPREF_LOGIN = "LOGIN ID";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.tumblr_web_view);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
tumblr_web_view = (WebView) findViewById(R.id.tumblr_web_view);
twtuname_pref = this.getSharedPreferences("user_pref", 1);
settings = getSharedPreferences(PREFS_NAME, 0);
editor = settings.edit();
userpref = getSharedPreferences(USER_PREF, 0);
twtlogpref = getSharedPreferences(TWTPREF_LOGIN, 0);
try {
this.consumer = new CommonsHttpOAuthConsumer(
Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET);
this.provider = new CommonsHttpOAuthProvider(Constants.REQUEST_URL,
Constants.ACCESS_URL, Constants.AUTHORIZE_URL);
} catch (Exception e) {
Log.e(TAG, "Error creating consumer / provider", e);
}
Log.i(TAG, "Starting task to retrieve request token.");
// new OAuthRequestTokenTask(this,consumer,provider).execute();
try {
Log.i(TAG, "Retrieving request token from Google servers");
final String url = provider.retrieveRequestToken(consumer,
Constants.OAUTH_CALLBACK_URL);
Log.i(TAG, "Popping a browser with the authorize URL : " + url);
// Intent intent = new Intent(Intent.ACTION_VIEW,
// Uri.parse(url)).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP |
// Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_FROM_BACKGROUND);
// this.startActivity(intent);
tumblr_web_view.loadUrl(url);
} catch (Exception e) {
Log.e(TAG, "Error during OAUth retrieve request token", e);
}
}
/**
* Called when the OAuthRequestTokenTask finishes (user has authorized the
* request token). The callback URL will be intercepted here.
*/
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
final Uri uri = intent.getData();
if (uri != null
&& uri.getScheme().equals(Constants.OAUTH_CALLBACK_SCHEME)) {
Log.i(TAG, "Callback received : " + uri);
Log.i(TAG, "Retrieving Access Token");
new RetrieveAccessTokenTask(this, consumer, provider, prefs)
.execute(uri);
// finish();
}
}
public class RetrieveAccessTokenTask extends AsyncTask<Uri, Void, Void> {
@SuppressWarnings("unused")
private Context context;
private OAuthProvider provider;
private OAuthConsumer consumer;
private SharedPreferences prefs;
public RetrieveAccessTokenTask(Context context, OAuthConsumer consumer,
OAuthProvider provider, SharedPreferences prefs) {
this.context = context;
this.consumer = consumer;
this.provider = provider;
this.prefs = prefs;
}
/**
* Retrieve the oauth_verifier, and store the oauth and
* oauth_token_secret for future API calls.
*/
@Override
protected Void doInBackground(Uri... params) {
Uri uri = params[0];
Log.v("uri >>", uri + "");
String oauth_verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
try {
consumer.setTokenWithSecret(consumer.getToken(),
consumer.getTokenSecret());
// provider.retrieveAccessToken(consumer, oauth_verifier);
Log.v("getToken", consumer.getToken());
Log.v("getTokenSecret", consumer.getTokenSecret());
Editor uname_editor = twtuname_pref.edit();
uname_editor.putString("token", consumer.getToken());
uname_editor.putString("secret_token",
consumer.getTokenSecret());
uname_editor.putString("login_status", "already_logged");
uname_editor.commit();
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(
"http://api.tumblr.com/v2/user/info");
try {
HttpResponse httpResponse = httpClient.execute(httpGet);
System.out.println("httpResponse");
InputStream inputStream = httpResponse.getEntity()
.getContent();
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream);
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
StringBuilder stringBuilder = new StringBuilder();
String bufferedStrChunk = null;
while ((bufferedStrChunk = bufferedReader.readLine()) != null) {
stringBuilder.append(bufferedStrChunk);
}
System.out.println("Returning value of doInBackground :"
+ stringBuilder.toString());
} catch (ClientProtocolException cpe) {
System.out
.println("Exception generates caz of httpResponse :"
+ cpe);
cpe.printStackTrace();
} catch (IOException ioe) {
System.out
.println("Second exception generates caz of httpResponse :"
+ ioe);
ioe.printStackTrace();
}
} catch (Exception e) {
Log.e(TAG, "OAuth - Access Token Retrieval Error", e);
}
return null;
}
}
}
我收到以下错误。
06-06 23:06:20.084: I/System.out(20264): Returning value of doInBackground :{"meta":{"status":401,"msg":"Not Authorized"},"response":[]}
我做错了什么?
更新:现在成功获取到用户信息了。获取用户博客名称。
public class RetrieveAccessTokenTask extends AsyncTask<Uri, Void, Void> {
@SuppressWarnings("unused")
private Context context;
private OAuthProvider provider;
private OAuthConsumer consumer;
private SharedPreferences prefs;
public RetrieveAccessTokenTask(Context context, OAuthConsumer consumer,
OAuthProvider provider, SharedPreferences prefs) {
this.context = context;
this.consumer = consumer;
this.provider = provider;
this.prefs = prefs;
}
/**
* Retrieve the oauth_verifier, and store the oauth and
* oauth_token_secret for future API calls.
*/
@Override
protected Void doInBackground(Uri... params) {
Uri uri = params[0];
Log.v("uri >>", uri + "");
String oauth_verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
try {
consumer.setTokenWithSecret(consumer.getToken(),
consumer.getTokenSecret());
provider.retrieveAccessToken(consumer, oauth_verifier);
Log.v("getToken", consumer.getToken());
Log.v("getTokenSecret", consumer.getTokenSecret());
Editor uname_editor = twtuname_pref.edit();
uname_editor.putString("token", consumer.getToken());
uname_editor.putString("secret_token",
consumer.getTokenSecret());
uname_editor.putString("login_status", "already_logged");
uname_editor.commit();
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(
"http://api.tumblr.com/v2/user/info");
try {
consumer.sign(httpGet);
HttpResponse httpResponse = httpClient.execute(httpGet);
System.out.println("httpResponse");
InputStream inputStream = httpResponse.getEntity()
.getContent();
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream);
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
StringBuilder stringBuilder = new StringBuilder();
String bufferedStrChunk = null;
while ((bufferedStrChunk = bufferedReader.readLine()) != null) {
stringBuilder.append(bufferedStrChunk);
}
System.out.println("Returning value of doInBackground :"
+ stringBuilder.toString());
} catch (ClientProtocolException cpe) {
System.out
.println("Exception generates caz of httpResponse :"
+ cpe);
cpe.printStackTrace();
} catch (IOException ioe) {
System.out
.println("Second exception generates caz of httpResponse :"
+ ioe);
ioe.printStackTrace();
}
} catch (Exception e) {
Log.e(TAG, "OAuth - Access Token Retrieval Error", e);
}
return null;
}
}
我试图将图片发布到已登录用户的博客中。使用了以下代码。但没有得到回应。
try {
HttpClient client = new DefaultHttpClient();
client.getConnectionManager()
.getSchemeRegistry()
.register(
new Scheme("SSLSocketFactory", SSLSocketFactory
.getSocketFactory(), 443));
HttpConnectionParams.setConnectionTimeout(client.getParams(),
10000);
HttpResponse response1;
HttpPost post = new HttpPost(
"http://api.tumblr.com/v2/blog/"+username+".tumblr.com/post");
consumer.sign(post);
JSONObject json_obj_val = new JSONObject();
json_obj_val.put("type", "photo");
json_obj_val.put("caption", "test");
json_obj_val.put("source", "http://50.57.227.117/blacksheep/uploaded/Detailed_images/961314275649aladdins.jpg");
post.setHeader("Content-Type", "application/json");
post.setHeader("Accept", "application/json");
StringEntity entity_val = new StringEntity(
json_obj_val.toString());
entity_val.setContentEncoding(new BasicHeader(
HTTP.CONTENT_TYPE, "application/json"));
post.setEntity(entity_val);
response1 = client.execute(post);
String response_string = EntityUtils.toString(response1.getEntity());
Log.v("response >>", response_string);
Log.v("response length >>", response_string.length() + "");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ClientProtocolException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (OAuthMessageSignerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthCommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
得到以下回应。代码有什么问题?
06-11 16:24:46.312: V/response >>(27710): {"meta":{"status":400,"msg":"Bad Request"},"response":{"errors":["Post cannot be empty."]}}
最佳答案
我找到了解决方案。我使用以下代码并成功将图像发布到登录用户的博客。
DefaultHttpClient client = new DefaultHttpClient();
HttpResponse resp = null;
String result = null;
HttpPost hpost = new HttpPost("http://api.tumblr.com/v2/blog/" + username + ".tumblr.com/post");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("type", "photo"));
nameValuePairs.add(new BasicNameValuePair("caption", "hello"));
nameValuePairs.add(new BasicNameValuePair("source", "url_of_the_image"));
String debug = "";
try {
hpost.setEntity(new UrlEncodedFormEntity(
nameValuePairs));
consumer.sign(hpost);
resp = client.execute(hpost);
result = EntityUtils.toString(resp.getEntity());
Log.v("result >>", result);
} catch (UnsupportedEncodingException e) {
debug += e.toString();
} catch (OAuthMessageSignerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthCommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
关于android - 需要在 android 中将图片发布到 Tumblr 博客,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16968684/
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我基本上有三个环境用于在我的主站点上工作。我的计算机上有我的本地一个,而我的网络服务器上有开发和实时的。我在本地环境中使用 Wordpress 开发了该站点,并希望通过 svn 使所有内容保持最新。
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有 gatsby 博客,在我创建新帖子并构建静态文件后,将它们上传到我的主机上,每个用户都必须在我的博客上进行硬刷新才能看到更改。 上传新版本后如何在下次访问时自动刷新? 最佳答案 这种行为的另一个
我需要博客链接,以及涵盖 GroovyFx 的教程。我试过在谷歌上搜索它,我没有得到任何有用的教程。我需要从上到下全面覆盖 GroovyFx! 提前致谢。 最佳答案 您的意思是您想要全面覆盖的博客条目
我最近更换了计算机,并且不小心删除了所有源(Markdown 文件等)的本地版本。不管我怎么想,这一切都在 Github(我使用 GitHub 页面)中,所以我可以从那里开始。但是,我已经进入 Git
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
标题几乎说明了一切。博客在同一个帐户下。 Asked this question on Quora几乎没有回应。 我正在寻找一个网络应用程序,它可以自动执行该过程。如果那里还没有任何东西,我准备使用
在浏览一些关于 Java 反射和泛型的 Jakov Jenkov 博客时,我发现了以下段落: When runtime inspecting a parameterizable type itself
我进退两难:我已经做了rake deploy我的 Octopress 博客运行良好。文档说我必须再做 3 个步骤: git add . git commit -m 'message' git push
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我尝试了几种方法,但似乎无法完成其中的每一部分。我为某人制作了一个 wordpress 博客,她对此很满意,但最近想要更改标题。我把它放宽了,她想要它装箱/居中。基本上,标题包含 Logo 、导航和左
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我已经尝试在我的网络服务器上安装 Ghost.io 有一段时间了。我有一个带有 Centos 6 和 Cpanel 的 VPS。 今天我在 http://www.allaboutghost.com/o
这里我有一个网站,tinywolf.uk,我目前正在使用它。主页是一个独立于 wordpress 的静态网站,但网站的博客部分 http://www.tinywolf.uk/blog将由 wordpr
我是 Django Web 开发的半菜鸟。我已经成功添加了一个文件字段,实际上允许我将图像上传到帖子中(图像显示在帖子列表和帖子详细信息中),但是如果我想在帖子中添加多个图像该怎么办? 我目前正在撰写
我特别想了解 Web 开发和 Windows azure。我认为为个人网站创建一个博客应用程序将是一个很好且简单的项目来实现这一目标。 有谁知道演练/教程可以帮助我走上这条路,或者更好地涵盖这个确切的
我遇到了一个小问题,因为我目前正在尝试以编程方式同时登录两个 wordpress 博客。我有一个自定义登录页面,必须为两个 wordpress 博客创建 session 。一个博客工作得很好,但因为我
我是一名优秀的程序员,十分优秀!