使用新浪微博开放平台api同步微博内容至自己网站([官方PHP]创建应用.php代码)

优采云 发布时间: 2022-01-23 23:21

  使用新浪微博开放平台api同步微博内容至自己网站([官方PHP]创建应用.php代码)

  参考文章

  搜索的时候也发现是通过代码实现的:

  [[API使用代码]WordPress自动同步到新浪微博头条文章]

  【自动同步WordPress中的文章到新浪微博(纯代码,支持自定义A*敏*感*词*ey)】

  [【新界面】WordPress新的文章带图同步微博]

  分析

  看文章,基本都是通过微博界面完成的,然后需要创建一个小应用,很麻烦。擦脸.gif。

  OK,然后查看官方界面,发现只能使用一个。【第三方分享微博链接】。

  好吧,那就创建一个应用,用微博接口来实现吧。Wordpress 是用 php 代码编写的,所以你可以查看 [Official PHP SDK]

  创建应用

  在【微博·开发平台】登录微博账号,点击【微服务】,【立即创建微服务应用】,选择【粉丝服务平台】(我是个人开发者,好像只能选这个) . 按照一步一步的设置。

  确保以下要素:

  另外,在【我的应用】-【具体应用】-【界面管理】-【现有权限】中,需要保证有第三方分享到微博。我在 2016 年创建的应用程序没有这个接口。

  实现代码

  在测试过程中,可以使用 POSTMAN 工具进行测试。同时发现不需要OAuth2.0授权方式,改用Basic方式。

  在wordpress目录下找到当前主题的functions.php文件,例如:wordpress\wp-content\themes\twentyseventeen\functions.php,在最后(before?>)添加如下代码,

  PHP下载functions.php

  1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

  /**

* WordPress文章同步到新浪微博,带图片

* 作者地址: http://laycher.com

*/

function post_to_sina_weibo($POST_ID, $debug = false) {

$api_url = 'https://api.weibo.com/2/statuses/share.json';

$app_key = '1234567890'; //修改为自己的app key

$user_pwd = 'dXNlcm5hbWVAMTYzLmNvbTpQYXNzd29yZA=='; //修改为base64位加密的 账号:密码,username@163.com:Password , 可到http://base64.xpcha.com/ 加密

if (wp_is_post_revision($POST_ID)) return; //修订版本不发布。

$post_status = get_post($POST_ID)->post_status;

$post_title = get_post($POST_ID)->post_title;

$post_content = get_post($POST_ID)->post_content;

if ($post_status == 'publish' && $_POST['original_post_status'] != 'publish') {

$status = '【' . strip_tags($post_title) . '】 ' . get_permalink($POST_ID) . mb_strimwidth(strip_tags(apply_filters('the_content', $post_content)) , 0, 150, '...');

$status = mb_strimwidth($status, 0, 128*2+mb_strlen(get_permalink($POST_ID),'utf-8'),'...','utf-8');//链接算十个字,共140个字,...算2个字

preg_match_all('//i', $post_content, $matches);

$first_img = $matches[1][0]; //将文章第一张图片的地址赋值给$first_img

if (empty($first_img)) { // 文章第一张图为空,

$request = new WP_Http;

$headers = array(

'Authorization' => 'Basic ' . $user_pwd,

'Content-Type' => 'application/x-www-form-urlencoded'

);

$body = array(

'source' => $app_key,

'status' => $status

);

$result = $request->post($api_url, array(

'body' => $body,

'headers' => $headers

));

if ($debug) {

logInfo($result['body']);

}

} else {

$array = explode('?', basename($first_img));

$filename = $array[0];

$filecontent = file_get_contents($first_img);

$boundary = uniqid('------------------');

$MPboundary = '--' . $boundary;

$endMPboundary = $MPboundary . '--';

$multipartbody = '';

$multipartbody.= $MPboundary . "\r\n";

$multipartbody.= 'content-disposition: form-data; name="source' . "\"\r\n\r\n";

$multipartbody.= urlencode($app_key) . "\r\n";

$multipartbody.= $MPboundary . "\r\n";

$multipartbody.= 'content-disposition: form-data; name="status' . "\"\r\n\r\n";

$multipartbody.= urlencode($status) . "\r\n";

$multipartbody.= $MPboundary . "\r\n";

$multipartbody.= 'Content-Disposition: form-data; name="pic"; filename="' . $filename . '"' . "\r\n";

$multipartbody.= "Content-Type: image/unknown\r\n\r\n";

$multipartbody.= $filecontent . "\r\n";

$multipartbody.= $endMPboundary;

$headers = array(

'Authorization: Basic ' . $user_pwd,

'content-Type: multipart/form-data; boundary=' . $boundary

);

$ci = curl_init();

curl_setopt($ci, CURLOPT_URL, $api_url);

curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); //关闭SSL,否则校验证书失败

curl_setopt($ci, CURLOPT_POST, TRUE);

curl_setopt($ci, CURLOPT_POSTFIELDS, $multipartbody);

$curlResponse = curl_exec($ci);

$err = curl_error($ci);

curl_close($ci);

if ($debug) {

logInfo($curlResponse);

if ($err) {

logInfo("cURL Error #:" . $err);

}

}

}

}

}

// 写日志函数

function logInfo($msg) {

$path = get_template_directory();

$logFile = $path.'/sync_weibo.log'; // 日志路径

date_default_timezone_set('Asia/Shanghai');

file_put_contents($logFile, date('[Y-m-d H:i:s]: ') . $msg . PHP_EOL, FILE_APPEND);

return $msg;

}

add_action('publish_post', 'post_to_sina_weibo', 0); //0代表优先级,默认10,最小。

  如果把上面的$debug改成true,就会在functions.php同目录下产生sync_weibo.log文件,并查看执行结果日志。

  显示结果

  发完这个文章,去我的微博看看吧。[Laycher的微博]

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线