• C# 新浪微博群发器


    通过新浪微博api群发微博,使用了sina提供的sdk,并对其进行小改,跳过了oauth页面认证。这个sdk用起来挺方便的。下面介绍实现方法,给有这方面需要的一个参考。

    由于跳过了oauth页面认证,需要发送一次用户密码,不够安全,大家应该酌情使用。

    我小改的sdk下载地址,将下载下来的文件夹复制到项目中:https://files.cnblogs.com/fmnisme/sinaApi.rar

    sina官方文档中心:http://open.weibo.com/wiki/index.php/%E9%A6%96%E9%A1%B5

    绕过oauth页面认证的方法使用了博客园akita 的方法,在此感谢,关于该方法的博客:http://www.cnblogs.com/btxakita/archive/2011/05/24/2055767.html

    新浪对api访问次数有限制:

    也就是说:每个账号每小时最多发30条微博。。。。

    skd使用方法:

    首先修改SDK中GlobalInfo类的appkey,appSecret为你在sina申请到的appKey,appSecret;

    var httpRequest = HttpRequestFactory.CreateHttpRequest(Method.GET) as HttpGet;
    //因为群发博客,所以用数组存放了用户信息,x代表数组下标。
    httpRequest.GetRequestToken();
    string url = httpRequest.GetAuthorizationUrl();
    GlobalInfo.requestTokens[x]
    = httpRequest.Token;
    GlobalInfo.requesTokenSecrets[x]
    = httpRequest.TokenSecret;
    httpRequest.GetVerifier(“用户名[x]”,“密码[x]”x);
    httpRequest.GetAccessToken();
    GlobalInfo.requestTokens[x]
    = httpRequest.Token;
    GlobalInfo.requesTokenSecrets[x]
    = httpRequest.TokenSecret;
    var sendUrl = "http://api.t.sina.com.cn/statuses/update.xml?";
                    httpRequest2.Request(sendUrl, "status=" + HttpUtility.UrlEncode(“微博内容”));

    下面贴出代码:

    using:

    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.IO;
    using LeoShi.Soft.OpenSinaAPI;
    using System.Web;
    using System.Threading;

    读取配置文件并获取相应的accessToken,配置文件的格式为:username&password,每个这样的占一行,使用记事本写就行了。

    private void btn_readIni_Click(object sender, EventArgs e)
    {
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
    txt_filePath.Text
    = openFileDialog1.FileName;
    }

    if (txt_filePath.Text != "")
    {
    FileStream fs
    = new FileStream(txt_filePath.Text, FileMode.Open, FileAccess.Read);
    StreamReader sr
    = new StreamReader(fs);
    while(!sr.EndOfStream)
    {
    string str = sr.ReadLine();;
    if (str == "")
    continue;
    string[] strArr = str.Split('&');
    userInfoList.Add(
    new string[2] {strArr[0].Trim(),strArr[1].Trim()});
    }
    sr.Close();
    fs.Close();
    }
    btn_send.Enabled
    = false;
    initSina();
    btn_send.Enabled
    = true;
    lb_status.Text
    = "成功连接微博,初始化完成";
    }

    private void initSina()
    {
    for (int x = 0; x < userInfoList.Count; x++)
    {
    if (userInfoList[x][0]=="")
    break;
    var httpRequest
    = HttpRequestFactory.CreateHttpRequest(Method.GET) as HttpGet;
    httpRequest.GetRequestToken();
    string url = httpRequest.GetAuthorizationUrl();
    GlobalInfo.requestTokens[x]
    = httpRequest.Token;
    GlobalInfo.requesTokenSecrets[x]
    = httpRequest.TokenSecret;
    httpRequest.GetVerifier(userInfoList[x][
    0], userInfoList[x][ 1],x);
    httpRequest.GetAccessToken();
    GlobalInfo.requestTokens[x]
    = httpRequest.Token;
    GlobalInfo.requesTokenSecrets[x]
    = httpRequest.TokenSecret;
    }
    }

    发送微博:

    private void btn_send_Click(object sender, EventArgs e)
    {
    Thread sendWeiboThread
    = new Thread(new ThreadStart(sendWeibo));
    sendWeiboThread.Start();
    }

    private void sendWeibo()
    {
    Thread.CurrentThread.IsBackground
    = true;
    Control.CheckForIllegalCrossThreadCalls
    = false;
    btn_send.Enabled
    = false;
    btn_readIni.Enabled
    = false;
    for (int m = 0; m < int.Parse(txt_sendTimes.Text); m++)
    {
    times
    ++;
    for (int x = 0; x < userInfoList.Count; x++)
    {
    lb_status.Text
    = userInfoList[x][0] + " " + x.ToString() + "/" + userInfoList.Count;
    var httpRequest2
    = HttpRequestFactory.CreateHttpRequest(Method.POST);
    httpRequest2.Token
    = GlobalInfo.requestTokens[x];
    httpRequest2.TokenSecret
    = GlobalInfo.requesTokenSecrets[x];
    var sendUrl
    = "http://api.t.sina.com.cn/statuses/update.xml?";
    httpRequest2.Request(sendUrl,
    "status=" + HttpUtility.UrlEncode(txt_weibo.Text + " " + times.ToString()));
    Thread.Sleep(
    150);
    }
    }
    btn_send.Enabled
    = true;
    btn_readIni.Enabled
    = true;
    lb_status.Text
    = "发送完成。";
    }

  • 相关阅读:
    ado.net
    sql基础
    css样式
    HTML基础加强
    socket网络编程
    网络聊天室
    多线程
    WinForm基础
    使用Maven插件(plugin)MyBatis Generator逆向工程
    SpringBoot使用thymeleaf时候遇到无法渲染问题(404/500)
  • 原文地址:https://www.cnblogs.com/fmnisme/p/2063705.html
Copyright © 2020-2023  润新知