android客户端接入新浪、腾讯微博以及人人网

本文原创http://blog.csdn.net/yanbin1079415046,转载请注明出处。

  从事android工作也有段时间了,碍于肚子里料不多,一直也没写过什么东西。最近刚好项目中要接入新浪微博,就顺便研究了一下android客户端接入腾讯微博和人人网。由于是第一次写东西,加上本人小菜鸟一个,请高手勿喷,觉得文章没用的飘过,当然啦,觉得还有点用的就看看吧。好了,废话不多说了,进入我们的正题吧。

一:这是个什么东西?

说白了,接入微博就是让你的应用程序可以调用新浪微博,腾讯微博和人人网的api,实现微博发送,分享给好友等等的功能啦。当然也可以实现让你的客户端使用微博账号进行登录。我们这篇文章要讲的就是访问这些社交平台提供的api的时候比较关键的一步,获取调用api接口的token,token可以理解为我们的客户端程序与社交平台api交互的令牌。

二:官方教程在哪里?

  学习东西,当然是官方的东西最好了。下面我们就简单说说接入新浪,腾讯微博以及人人网的官方教程吧。同学们也可以自行去看官方的教程,那么我下面写的东西就可以忽略不计了。大笑

  新浪微博 api:http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5

      首先,当然你得有一个新浪微博的账号啦。然后就是注册应用啊等等一代堆东西,自己去 开发指南--新手引导 中看吧。然后,就要填写我们的信息了。这里要注意授权页的填写,在 我的应用--应用信息--高级信息--授权回调页 这里,如下图1。最后,就是如何对我们的客户端程序进行授权了。新浪微博的授权机制说明如下:大部分API的访问如发表微博、获取私信,关注都需要用户身份。目前新浪微博开放平台用户身份鉴权有OAuth2.0和Basic Auth(仅用于应用所属开发者调试接口)两种方式。我们这里采用的是OAuth2.0的授权机制。

      如何获取token,我们将在下面的文章中结合代码进行讲解。    

图1 设置授权回调页

 

  腾讯微博   api:http://dev.t.qq.com/

     腾讯微博的应用申请和新浪微博的类似,它也有一个授权回调页。不过它不是这个名字,它的名字是:应用网址。为简单起见,我们这里也使用默认的地址,即:http://www.tencent.com/zh-cn/index.shtml 其他的和腾讯微博差不多,就不赘述了。腾讯微博提供了OAuth 1.0a,OAuth2.0和OpenId&OpenKey授权方式,本人中采用的是OAuth2.0授权方式,其他的方式同学们自行研究。

  人人网        api:http://dev.renren.com/    人人网使用OAuth 2.0作为验证与授权协议。

  2012.10月编辑:

  人人网目前有一个移动开发者平台,专门为移动应用和HTML5应用提供更简洁的授权接口,简单易用,称为人人移动开发者中心。地址如下:

  http://dev.mobile.renren.com/home/show

三:关于OAuth2.0

   本人比较懒,就不把概念贴在这里了。自己百度去吧,百度百科中有这样的一句概括:OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。这里我们稍微说一下OAuth2.0的认证流程。文章请看这里:http://blog.unvs.cn/archives/oauth-qq2.0-developer.html。首先感谢这位哥们,然后不想点开链接的同学就直接看下面的吧。

在OAuth2.0的处理流程,主要分为以下四个步骤:

1、得到授权码code
2、获取access token
3、通过access token,获取OpenID
4、通过access token及OpenID调用API,获取用户授权信息
上面是流程的大概四个步骤,在下面的流程示意图中会得到体现,这是我制作的一个幻灯片的流程图(文章最后会附上制作的OAuth幻灯片分享给大家),这里就直接截图下来进行讲解:
图2 OAuth2.0 认证流程


 
第一步:首先直接跳转至用户授权地址,即图示 Request User Url ,提示用户进行登录,并给予相关资源授权,得到唯一的Auth code,这里注意的是code只有10分钟的有效期,对于安全考虑,相对于OAuth1.0省了一步获取临时的Token,并且有效期也进行了控制,比1.0认证简化了很多,并安全一些;
第二步:得到授权code后,这一步就是请求access token,通过 图示 Request access url ,生成得到数据Token;
第三步:通过Access Token请求OpenID,openid是用户在此平台的唯一标识,通过 图示 Request info url 请求,然后得到OpenID;
第四步:通过第二步得到的数据Token、第三步得到的OpenID及相关API,进行请求,获取用户授权资源信息。(我喜欢简洁明了,OAuth2.0认证流程就是这样,相信通过图示及讲解都能明白,若有不明白之处请留言)

四:让你的应用程序访问社交平台api(获取token)。注意要加相应的权限,文章后面会贴出清单文件中所需的权限。

    新浪微博授权:

   详细内容请参见新浪微博SDK中自带的文档:Android平台微博SDK说明文档.docx。它在SDK的工程目录下, 所以你要导入SDK工程的时候主要把它去了。由于新浪微博给我们提供的SDK是以工程的方式给出的,所以我们需要引用它的工程才可以使用它提供的api。当然啦,这样放到实际环境中是不行的。所以我们可以将SDK下的相关文件拷贝到我们的自己的工程目录下即可,注意修改相应的东西。本人是这样做的,不知道还有没有更好的方式尴尬。具体的请看文章后面给出的demo。值得一提的是,人人网也是以这种方式提供SDK的,但是腾讯微博给我们提供的是JAR,这个看起来就简洁多了大笑。这里顺便说一下覆盖的方法吧,就是将新浪微博给我们提供的SDK工程文件下的src和res文件夹拷贝到你自己的工程中覆盖原有的文件即可。

   环境准备好了,我们就可以开始进行代码的编写了。还是那句话,有官方教程在呢,同学们可以对着教程来练习,我下面只是结合代码简单的说一下。

//sina   CONSUMER_KEY、CONSUMER_SECRET替换成你自己应用的key和secret
private static final String CONSUMER_KEY = "913917729";
private static final String CONSUMER_SECRET = "32c47f37e4727ce9c0db1ceee12bf765";
private String redirectUriSina="http://www.sina.com"; //授权回调页    与 我的应用--应用信息--高级信息 中一致
OAuthV2 authV2 = null;//腾讯微博Oauth
Renren renren = null;//renren
File file = null;
String basepath = "";
//tencent CLINETID、CLIENTSECRET替换成你自己应用的key和secret
private static final String CLINETID = "801208558";
private static final String CLIENTSECRET = "da6d09bb537559c37cb36561fd825346";
//认证成功后浏览器会被重定向到这个url中  必须与注册时填写的一致
private String redirectUriTen="http://www.tencent.com/zh-cn/index.shtml"; 
//renren API_KEY、SECRET_KEY替换成你自己应用的key和secret
private static final String API_KEY = "b6f9602ab3714023b794d34b51639a99";
private static final String SECRET_KEY = "f51ce08118014784a0579ba88730b6bd";
private static final String APP_ID = "206681";//人人网还需要app_id
private static final int RENREN_REQUEST_CODE = 123;
String accessToken;

 

//新浪微博认证
Weibo weibo = Weibo.getInstance();
if(!isOauthSina(weibo)){
weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET);//设置你的key和secret
weibo.setRedirectUrl(redirectUriSina);
weibo.authorize(this, new OauthDialogListener());
}else{
tv.setText("access_token : " + accessToken);
Toast.makeText(getApplicationContext(), "该用户已经授权", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.putExtra("accessToken", accessToken);
intent.putExtra("flag", MyContent.SINA);
intent.setClass(InsertWeiboActivity.this, TestActivity.class);
startActivity(intent);
}


isOauthSina方法如下,它的作用是判断用户是否已经对我们的应用进行了授权。

/**
* 新浪微博 用户是否已经授权
* @param weibo
* @return
*/
private boolean isOauthSina(Weibo weibo){
boolean b = false;
accessToken = getSharedPreferences("token", Context.MODE_PRIVATE).getString("access_token", "");
if(weibo != null && !accessToken.equals("")){
b = true;
}
return b;
}


上面的两段代码中, 值得注意的地方是redirectUriSina,它是一个String类型的参数,值就是我们在之前提到过得那个授权回调页的地址。接着新浪微博将弹出一个授权页面的对话框,供用户输入用户名和密码(此处就不截图,自己跑demo看吧)。在用户输入用户名和密码之后,它将被我们的OauthDialogListener类监听到,它的实现如下:

/**
* 弹出新浪微博的授权页面
* @author yanbin
*
*/
private class OauthDialogListener implements WeiboDialogListener{
@Override
public void onComplete(Bundle values) {
String token = values.getString("access_token");
String expires_in = values.getString("expires_in");
tv.setText("access_token : " + token + "  expires_in: "
+ expires_in);
AccessToken accessToken = new AccessToken(token, CONSUMER_SECRET);
SharedPreferences sf = getSharedPreferences("token", Context.MODE_PRIVATE);
sf.edit().putString("access_token", accessToken != null ? accessToken.getToken() : "")
.commit();
//			accessToken.setExpiresIn(expires_in);
//			Weibo.getInstance().setAccessToken(accessToken);
Intent intent = new Intent();
intent.putExtra("accessToken",accessToken.getToken());
intent.putExtra("flag", MyContent.SINA);
intent.setClass(InsertWeiboActivity.this, TestActivity.class);
startActivity(intent);
}
@Override
public void onWeiboException(WeiboException e) {
//未作处理
}
@Override
public void onError(DialogError e) {
//未作处理
}
@Override
public void onCancel() {
Toast.makeText(InsertWeiboActivity.this, "您已经取消授权", 1).show();
}
}

 

WeiboDialogListener中有一个回调方法,它会在用户输入正确的用户名和密码之后返回给我们的客户端程序获取新浪微博提供的api的令牌(这个东西很重要的,你调用新浪微博api的时候每次都必须把它带上)。接下来的工作就是保存此token供下次使用了。这里我们存储在SharedPreference中。至此,我们就获取了新浪微博的token,接下来就可以操作新浪微博api了,比如发布一条微博,可以试试哦。  

 腾讯微博授权:  

 腾讯微博授权的官方实例请看这里,http://wiki.open.t.qq.com/index.php/%E7%A7%BB%E5%8A%A8%E5%BA%94%E7%94%A8%E6%8E%A5%E5%85%A5/Android_SDK_V1.2。下面我们结合代码说说我们的实现。  首先第一步就是得到腾讯给我们提供的授权回调页,代码如下,由于要弹出OAuthV2AuthorizeWebView这个页面,所以要在清单文件中声明。

//判断用户是否已经授权
if(!isOauchTen()){
//使用回调url来创建授权页面
authV2 = new OAuthV2(redirectUriTen);
authV2.setClientId(CLINETID);
authV2.setClientSecret(CLIENTSECRET);
//关闭OAuthV2Client中的默认开启的QHttpClient。
OAuthV2Client.getQHttpClient().shutdownConnection();
Intent intent = new Intent(InsertWeiboActivity.this, OAuthV2AuthorizeWebView.class);//创建Intent,使用WebView让用户授权
intent.putExtra("oauth", authV2);
startActivityForResult(intent,2); 
}else{
Toast.makeText(getApplicationContext(), "该用户已经授权", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.putExtra("oauth", authV2);
intent.putExtra("flag", MyContent.TENCENT);
intent.setClass(InsertWeiboActivity.this, TestActivity.class);
startActivity(intent);
}

 

这里我们看到了startActivityForResult,它会在用户输入完用户名和密码后执行OnActivityResult方法(包括了人人的实现),isOauthTen()方法的作用是判断用户是否已经授权过该应用。它们的代码如下:

OnActivityResult()方法:

 /**
* 新浪微博和人人网的授权
* 通过读取OAuthV2AuthorizeWebView返回的Intent,获取用户授权信息
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode==2) {
//腾讯微博授权
if (resultCode==OAuthV2AuthorizeWebView.RESULT_CODE)    {
OAuthV2 oAuth=(OAuthV2) data.getExtras().getSerializable("oauth");
if(oAuth != null && oAuth.getStatus()==0){
Toast.makeText(getApplicationContext(), "登陆成功", Toast.LENGTH_SHORT).show();
//跳转到发微博的界面
Intent intent = new Intent();
intent.putExtra("accessToken", oAuth.getAccessToken());
intent.putExtra("oauth", oAuth);
intent.putExtra("flag", MyContent.TENCENT);
//将认证保存起来,使用对象流
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(file);
oos = new ObjectOutputStream(fos);
oos.writeObject(oAuth);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
if(oos != null){
try {
oos.close();
oos = null;
} catch (IOException e) {
e.printStackTrace();
}
if(fos != null){
try {
fos.close();
fos = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
intent.setClass(InsertWeiboActivity.this, TestActivity.class);
startActivity(intent);	
}
else
Toast.makeText(getApplicationContext(), "登陆失败", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "授权失败", Toast.LENGTH_SHORT).show();
}
}else if(requestCode == RENREN_REQUEST_CODE){
//人人网授权
if (renren != null) {
renren.authorizeCallback(requestCode, resultCode, data);
}else{
Toast.makeText(getApplicationContext(), "授权失败", Toast.LENGTH_SHORT).show();
}
}
}

 isOauchTen()方法:

/**
* 腾讯微博接入是否已经验证
* @return
*/
private boolean isOauchTen() {
boolean b = false;
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
openFileOutput("aaa", Context.MODE_PRIVATE);
persistTenOauth();
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);//此处抛出EOFException,原因是独到了流的末尾还是返回空,我们这里直接在异常中将标志位记为false即可。
authV2 = (OAuthV2) ois.readObject();
if(authV2 != null){
b = true;
}
} catch (Exception e) {
b = false;
} finally{
if(ois != null){
try {
ois.close();
ois = null;
} catch (Exception e2) {
e2.printStackTrace();
}
}
if(fis != null){
try {
fis.close();
fis = null;
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
return b;
}


persistTenOauth()方法的作用是将我们获取到的token存储起来,由于调用腾讯微博api需要Token对象,没有办法所以我们只有将Token对象存起来,这里使用对象流的方式,具体实现如下:

/**
* 将腾讯微博的oauth持久化到文件中
*/
private void persistTenOauth(){
//加这一句的作用是防止  /data/data/package-name这个目录不存在
String s = getFileStreamPath("aaa").getAbsolutePath();
for(String ss : fileList()){
System.out.println("ss==" + ss);
}
String x = "";
try{
x = s.substring(0,s.lastIndexOf("/"));
}catch(Exception e){
e.printStackTrace();
x = "/data/data/yanbin.insertweibo";
}
//将文件存放在 /data/data/package-name目录下,当然你也可以存储在别的地方
try {
file = new File(x + "/oauth_ten.data");
if(!file.exists()){
new File(x).mkdirs();
file.createNewFile();
}
} catch (Exception e) {
e.printStackTrace();
}
}

至此,我们已经成功的获取到了访问腾讯微博必须的令牌,接下来我们就可以使用这个令牌操纵api了。  

 人人网授权:

 人人网并没有实现发心情的功能,只是简单的获取了它的token。

实现的代码如下:

if(!isOauthRenren()){
renren = new Renren(API_KEY, SECRET_KEY, APP_ID, this);
renren.authorize(this, null, new MyRenrenListener(), RENREN_REQUEST_CODE);
}else{
Toast.makeText(getApplicationContext(), "该用户已经授权", Toast.LENGTH_SHORT).show();
}

isOauthRenren用来判断用户是否对本客户端进行了授权。MyRenrenListener类会在用户在输入框中输入用户名和密码后回调。它们的具体实现如下:

isOauthRenren()方法:

/**
* renren 判断用户是否已经授权
* @return
*/
private boolean isOauthRenren(){
boolean b = false;
String token = getSharedPreferences("oauth_renren", Context.MODE_PRIVATE).getString("access_token", "");
if(!"".equals(token)){
b = true;
}
return b;
}

MyRenrenListener类的实现:

 /**
* 人人请求用户授权返回界面
* @author yanbin
*
*/
private class MyRenrenListener implements RenrenAuthListener{
@Override
public void onComplete(Bundle values) {
//服务器端返回的数据
//			{
//		    "access_token": "10000|5.a6b7dbd428f731035f771b8d15063f61.86400.1292922000-222209506",
//		    "expires_in": 87063,
//		    "refresh_token": "10000|0.385d55f8615fdfd9edb7c4b5ebdc3e39-222209506",
//		    "scope": "read_user_album read_user_feed"
//			}
Bundle bundle = values;
String access_token = bundle.getString("access_token");
int expires_in = bundle.getInt("expires_in");
String refresh_token = bundle.getString("refresh_token");
String scope = bundle.getString("scope");
System.out.println("验证服务器端返回的数据-->" + "access_token-->" + access_token
+ ",expires_in-->" + expires_in
+ ",refresh_token-->" + refresh_token
+ ",scope-->" + scope);
SharedPreferences sp = getSharedPreferences("oauth_renren", Context.MODE_PRIVATE);
sp.edit().putString("access_token", access_token).commit();
Toast.makeText(getApplicationContext(), "用户授权成功", Toast.LENGTH_SHORT).show();
//结果:
//验证服务器端返回的数据-->access_token-->206681|6.725b8c8b3457a7d2953868d63aaf4486.2592000.1346828400-473945629
//,expires_in-->0,refresh_token-->null,
//scope-->publish_feed create_album photo_upload read_user_album status_update
}
@Override
public void onRenrenAuthError(RenrenAuthError renrenAuthError) {
Toast.makeText(getApplicationContext(), "异常", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelLogin() {
//未作处理
}
@Override
public void onCancelAuth(Bundle values) {
//未作处理
}
}

至此,我们也成功的获取到了访问人人网api的token,接下来就是对api的操作了。下面是一些相关的类(TestActivity.java)和AndroidManifest.xml文件。

TestActivity.java: 

package yanbin.insertWeibo;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import com.tencent.weibo.api.TAPI;
import com.tencent.weibo.constants.OAuthConstants;
import com.tencent.weibo.oauthv2.OAuthV2;
import com.weibo.net.Utility;
import com.weibo.net.Weibo;
import com.weibo.net.WeiboException;
import com.weibo.net.WeiboParameters;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/**
* 腾讯微博,新浪微博   简单的发送一条微博,可以进你自己的微博查看是否发送成功
* @author yanbin
*/
public class TestActivity extends Activity {
Button btnSend ;
EditText et;
String accessToken;
OAuthV2 oAuthV2,oAuthV2_2;
int flag ;//flag用来标记是来自新浪,腾讯微博还是人人
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.send_weibo);
accessToken = getIntent().getStringExtra("accessToken");
flag = getIntent().getIntExtra("flag", -1);
oAuthV2 =  (OAuthV2) getIntent().getSerializableExtra("oauth");
btnSend = (Button) findViewById(R.id.btnSend);
et = (EditText) findViewById(R.id.et);
}
public void click(View view){
int id = view.getId();
switch (id) {
case R.id.btnSend:
switch (flag) {
case MyContent.SINA:
Weibo weibo = Weibo.getInstance();
WeiboParameters parameters = new WeiboParameters();
parameters.add("access_token", accessToken);
parameters.add("status", et.getText().toString());
//发送一条微博 url https://api.weibo.com/2/statuses/update.json
try {
String flag = weibo.request(this, Weibo.SERVER + "statuses/update.json", parameters, Utility.HTTPMETHOD_POST, weibo.getAccessToken());
System.out.println("flag==" + flag);
Toast.makeText(this, "发送微博成功", 1).show();
} catch (WeiboException e) {
e.printStackTrace();
Toast.makeText(this, "发送微博失败", 1).show();
}
finish();
break;
case MyContent.TENCENT:
TAPI tapi = new TAPI(OAuthConstants.OAUTH_VERSION_2_A);
try {
String response=tapi.add(oAuthV2, "json", et.getText().toString(), getHostIp());
System.out.println("response==" + response);
tapi.shutdownConnection();
System.out.println("发送微博成功");
Toast.makeText(this, "发送微博成功", 1).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "发送微博失败", 1).show();
}
finish();
break;
}
break;
}
}
/**
* 获取用户ip
* @return
*/
public static String getHostIp() {	
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> ipAddr = intf.getInetAddresses(); ipAddr
.hasMoreElements();) {
InetAddress inetAddress = ipAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {						
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException ex) {
} catch (Exception e) {
}
return null;
}
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="yanbin.insertWeibo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".InsertWeiboActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".TestActivity"></activity>
<!-- OAuth Version 2. 使用  WebView 辅助进行ImplicitGrant方式授权必须 -->
<activity
android:name="com.tencent.weibo.webview.OAuthV2AuthorizeWebView"
android:label="@string/app_name" >
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>   
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>

六:结束语

    接入社交平台本就是一个比价简单的功能,但是由于本人能力有限,组织语言能力也有限,所以整出了这么长一个篇幅,而且感觉还讲的不是很清楚,大部分篇幅都在贴代码。第一次发文章,感觉吧,特累。不说了,有需要的朋友直接去下demo自己捉摸捉摸吧。

DEMO下载地址:http://download.csdn.net/detail/yanbin1079415046/4497659 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55894.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【第三方互联】9、新浪微博(sina)授权第三方登录

当我们创建的新浪微博互联应用成功后,我们便可以开始使用该应用来实现新浪微博授权操作 一、获取 App Key 和 App Secret 1、在“我的应用”,点击应用,查看我们创建的应用的基本信息 这样,我们就获取到了 App Key 和 App Secret 2、将 App Key 和 App Secret,以及该应用…

爬取微博上某大v,明星,官微等用户的微博信息的小技巧

通常成功的大门&#xff0c;其实都是虚掩着的 现在大多在爬取微博时&#xff0c;都是采用selenium框架&#xff0c;爬取pc端微博页面&#xff0c;模拟鼠标下拉来解决动态加载的问题&#xff0c;虽然笨拙&#xff0c;但是也能解决问题。今天我给大家推荐个更加好的方法。首先清看…

用ChatGPT可以去微博做个大V了(狗头)

将来用ChatGPT可以去微博做个大V了&#xff08;狗头&#xff09; 体验最近很火的ChatGPT体验了一下&#xff0c;这个OpenAI是真的强。 这小诗写的还挺有意境&#xff0c;网上搜了一下还没看到完全一样的。 现在各大厂商都布局OpenAI&#xff0c;期待更多黑科技。

黄仁勋评价股东孙正义

看NVIDIA人工智能全局&#xff0c;黄仁勋评价股东孙正义 “孙正义是我所知道的唯一能准确预知每一次科技浪潮的人。” 云科技时代 2017/06/18 21:01评论(0) 收藏(0)字体&#xff1a;宋 英伟达孙正义 (黄仁勋在2017台北Computex上) 2017年5月&#xff0c;传出软银悄悄购入40亿美…

英伟达CEO黄仁勋:NFT元宇宙已经到来

在与 Venturebeat 视频游戏记者 Dean Takahashi 的对话中&#xff0c;英伟达&#xff08;Nvidia&#xff09;首席执行官黄仁勋 Jensen Huang 表示&#xff0c;他相信“我们正处于基于区块链的增强现实元宇宙的风口浪尖”。 在周六发表的采访中&#xff0c;这位显卡巨头负责人描…

“核弹”之父——黄仁勋

一抹幽绿&#xff0c;有如眼睛一般的形状——相信已经很难有人不认识NVIDIA那标志性的LOGO了。今天的NVIDIA在显卡领域可谓无人能及&#xff0c;在通用计算和AI领域也留下浓重一笔&#xff0c;而带领NVIDIA取得现在成就的就是NVIDIA的联合创始人、CEO——黄仁勋。 初识老黄 想…

华人“军火专家”——黄仁勋

昨天我们介绍GPU的文章中有提到一位华人&#xff0c;他由于两款产品发热量大到能煎鸡蛋&#xff0c;被游戏玩家戏称为“两弹元勋”“军火专家”&#xff0c;在硅谷被认为是和杰夫贝索斯、伊隆马斯克并驾齐驱的人物&#xff0c;他创办的公司尽管不像智能手机企业、互联网企业那样…

黄仁勋没有回应,英伟达没有新品

晓査 乾明 假装发自 苏州量子位 出品 | 公众号 QbitAI 黄仁勋上台&#xff0c;然后下台。 在今天上午的GTC China大会上&#xff0c;黄教主没能拿出让人惊艳的新品&#xff0c;也没有只字片语回应英伟达的目前的“困境”。 大会之后的采访环节&#xff0c;老黄也没来。 据说是&…

黄仁勋把自己做成了虚拟娃娃

明敏 发自 凹非寺量子位 报道 | 公众号 QbitAI 英伟达是推出黄仁勋手办了吗&#xff1f;&#xff1f;&#xff1f; 看上去还挺可爱的呢。 不过事情可没有这么简单&#xff0c;接下来这一幕或许就会让你大为震撼。 因为&#xff0c;这个萌版老黄&#xff0c;是 会 动 的。 不仅如…

虚拟人是如何制作的?企业专属虚拟形象如何定制打造成虚拟代言?

虚拟数字人是指以数字形式存在于数字空间中&#xff0c;具有拟人或真人的外貌、行为和特点的虚拟人物&#xff0c;也称之为虚拟形象、数字虚拟人等。虚拟数字人核心技术主要包括计算机图形学、动作捕捉、图像渲染、AI等。虚拟数字人可以打造更完美的人设&#xff0c;为品牌带来…

GPT学习路线分享

初代GPT-3展示了三个重要能力&#xff1a; 语言生成&#xff1a;遵循提示词&#xff08;prompt&#xff09;&#xff0c;然后生成补全提示词的句子。这也是今天人类与语言模型最普遍的交互方式。 上下文学习 (in-context learning): 遵循给定任务的几个示例&#xff0c;然后为…

程序员的数学---数学思维的锻炼

第三章&#xff1a; 余数–周期性和分组 星期问题 来看一道简单的题目&#xff1a;今天星期日&#xff0c;那么 100 天以后星期几&#xff1f; 这个问题最笨的方法就是数数了。不过那样也是颇为费事&#xff0c;从余数方向考虑&#xff1a;一个礼拜 7 天&#xff0c;100 天等…

LaTeX技巧10:LaTeX数学公式输入初级入门

常见数学公式问题集下载 LaTeX最强大的功能就是显示美丽的数学公式&#xff0c;下面我们来看这些公式是怎么实现的。 1、数学公式的前后要加上 $ 或 \( 和 \)&#xff0c;比如&#xff1a;$f(x) 3x 7$ 和 \(f(x) 3x 7\) 效果是一样的&#xff1b; 如果用 \[ 和 \]&#xf…

Latex系列4---数学公式

前面几章其实已经把基础的Latex中文文本写的差不多了。这一章节针对我论文中用到的数学公式写一些心得。 数学公式 通常理工科写论文&#xff0c;少不了数学公式。在公式上&#xff0c;我个人认为相比word&#xff0c;latex还是有非常大的优势。 行内公式 行内公式通常用一对…

在OneNote种使用Latex命令愉快地敲出数学公式

在OneNote种使用Latex命令愉快地敲出数学公式 office中所有支持键盘输入的公式 office中默认是用的Unicodemath&#xff0c;相关的语法上个链接里面就有&#xff0c;office提供了Unicodemath与latex互转的方法。相关链接如下&#xff1a;LaTeX Math in Office Unicodemath …

数学公式识别神器Mathpix,零错误高效率

我们完成论文最费时间的可能就是公式了&#xff0c;尤其是对于工科学生&#xff0c;所以这里给大家带来了特别高效率几乎零错误的识别公式工具&#xff0c;这样可以节约很多的时间。博主测验&#xff0c;效率非常好。 官网 地址&#xff1a;https://mathpix.com/ 进入后&…

数学公式截图识别神器Mathpix无限使用教程

源链&#xff1a;数学公式截图识别神器Mathpix无限使用教程 - 哔哩哔哩点击进入查看全文>https://www.bilibili.com/read/cv8289444?fromsearch&spm_id_from333.337.0.0一、Mathpix软件注册教程 1.首先打开网址&#xff1a;https://accounts.mathpix.com/signup?refer…

ChatGPT驱动的虚拟试衣间,提升电子商务购物体验

随着电子商务的快速发展&#xff0c;线上购物已成为现代消费者的主要选择之一。然而&#xff0c;与线下购物相比&#xff0c;线上购物存在一个重要的挑战&#xff1a;消费者无法亲自试穿衣物。这一问题影响了许多消费者的购物决策&#xff0c;因为他们无法确定穿着的合适性和外…

AI硅基小助手——一个数字虚拟人化的ChatGPT类工具

自从ChatGPT发布以来&#xff0c;各种AIGC大模型类工具产品如汗牛充栋&#xff0c;参差不齐&#xff0c;大都是接上了ChatGPT的接口&#xff0c;功能几乎都一样&#xff0c;让人觉得乏味。 最近有一款新的名为“AI硅基小助手”的程序上线了&#xff0c;他基于自研的“硅基知识大…

提升16倍!Meta data2vec 2.0 性能爆表;ICML禁止大语言模型生成论文,LeCun:中小模型可以?...

本周AI界又有哪些新鲜事&#xff1f; 基础核心 高通推出将AD和ADAS整合的Snapdragon Ride Flex芯片 在新一年的国际消费电子展上&#xff0c;高通推出专门给汽车设计的处理器芯片Snapdragon Ride Flex。据了解&#xff0c;该芯片提供的解决方案可以将自动驾驶&#xff08;AD&am…