当前位置: 首页 > 知识库问答 >
问题:

试图用Java在Reddit上发表评论

鄢朝斑
2023-03-14

我正试图搞乱一个程序,它会登录reddit帐户,并在线程上发表评论。到目前为止,这是我的登录代码:

DefaultHttpClient client = new DefaultHttpClient();

    HttpPost post = new HttpPost("https://ssl.reddit.com/api/login");
    List<NameValuePair> nameValuePairs = new ArrayList<>(4);
    nameValuePairs.add(new BasicNameValuePair("user", "username"));
    nameValuePairs.add(new BasicNameValuePair("passwd", "password"));
    nameValuePairs.add(new BasicNameValuePair("rem", "True"));
    nameValuePairs.add(new BasicNameValuePair("api_type", "json"));

    try {
        post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = client.execute(post);

        Header header = response.getFirstHeader("set-cookie");
        String cookie = header.getValue();

        if (cookie.startsWith("reddit_first")) {
            System.out.println("Unable to log in.");
        } else if (cookie.startsWith("reddit_session")) {
            System.out.println("Logged in successfullly.");

            CookieStore cs = new BasicCookieStore();
            System.out.println("Cookie: " + header.getValue());
            BasicClientCookie bcookie = new BasicClientCookie("reddit_session", header.getValue());
            bcookie.setDomain("reddit.com");
            bcookie.setPath("/");
            cs.addCookie(bcookie);
            client.setCookieStore(cs);
            redditCookie = header;
        }

        JSONObject obj = (JSONObject) JSONValue.parse(response.getEntity().getContent());
        JSONObject json = (JSONObject) obj.get("json");
        JSONObject data = (JSONObject) json.get("data");
        modHash = data.get("modhash").toString();
    } catch (Exception e) {
        e.printStackTrace();
    }

这确实有效——它报告成功登录,并存储modhash。

对于发表评论,我有:

post = new HttpPost("https://ssl.reddit.com/api/comment");
post.addHeader(redditCookie);
nameValuePairs = new ArrayList<>(4);
nameValuePairs.add(new BasicNameValuePair("api_type", "json"));
nameValuePairs.add(new BasicNameValuePair("text", imgurLink + "\r\n"));
nameValuePairs.add(new BasicNameValuePair("thing_id", thingId));
nameValuePairs.add(new BasicNameValuePair("uh", modHash));

try {
    post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    response = client.execute(post);

    obj = (JSONObject) JSONValue.parse(response.getEntity().getContent());
    System.out.println(obj.toJSONString());
} catch (Exception e) {
    e.printStackTrace();
}

虽然,当我尝试发送评论时,它告诉我需要登录才能执行此操作。我知道我必须发送reddit_session cookie才能发表评论,但我不知道我是否正确。

共有1个答案

强宾白
2023-03-14

你看过jReddit吗?它几乎是一个完整的Reddit APIJava包装器。

 类似资料:
  • 我是API的新手,正在使用JSON,希望在这里得到一些帮助。 我知道我想要完成的所有事情都可以使用PRAW库来完成,但我试图在没有PRAW的情况下弄清楚。 我有一个for循环,它从一个特定的子编辑中提取文章标题,将所有的文章标题输入到一个pandas数据帧中,在达到限制后,将< code >‘after 参数更改为最后一个文章id,以便在下一批中重复。 一切都很完美,但是当我对特定线程尝试相同的技

  • 问题内容: 我正在写一个Dockerfile。有没有办法在此文件中发表评论? Docker是否具有注释选项,该选项占用了其余行而忽略了它? 问题答案: 您可以使用#作为该行的开头来注释该行。 注意: #as 注释只能在行的 开始处 使用。

  • 这是 reddit 官方网站的历史源代码。

  • 我正在reddit API中寻找示例。我想从某个subreddit(http://www.reddit.com/r/VillagePorn)中提取图像并将它们放在网页上。我见过其他网站这样做(主要是),我不知道怎么做。 我试过,但只返回图片的缩略图。甚至链接本身也没有。 我该怎么办?

  • 这是一个高级教程的例子,包含使用 Reddit API 请求文章标题的全部源码。 入口 index.js import 'babel-polyfill' import React from 'react' import { render } from 'react-dom' import Root from './containers/Root' render(<Root />, docume

  • 我的一个应用程序通过读取数组列表将对象绘制到屏幕上: 简单代码摘要: 问题是每次用户点击鼠标时我都会添加更多的对象,所以如果用户点击的速度足够快,我会导致程序绘画结结巴巴,因为它在写入时无法读取(arrayList是同步的)。开发人员处理这种并发问题的常用做法是什么? 编辑:下面是调用重新绘制的代码: *其中operations()计算“paintable”对象属性的更改,移除满足特定条件的对象,