使用JRAW获得错误响应

2024-09-29 19:36:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用java从reddit读取数据。我正在使用JRAW。你知道吗

这是我的密码:

public class Main {
    public static void main(String args[]) {
        System.out.println('a');
        String username = "dummyName";
        UserAgent userAgent = new UserAgent("crawl", "com.example.crawl", "v0.1", username);
        Credentials credentials = Credentials.script(username, <password>,<clientID>, <client-secret>);
        NetworkAdapter adapter = new OkHttpNetworkAdapter(userAgent);
        RedditClient reddit = OAuthHelper.automatic(adapter, credentials);
        Account me = reddit.me().about();
        System.out.println(me.getName());
        SubmissionReference submission = reddit.submission("https://www.reddit.com/r/diabetes/comments/9rlkdm/shady_insurance_work_around_to_pay_for_my_dexcom/");
        RootCommentNode rcn = submission.comments();
        System.out.println(rcn.getDepth());
        System.out.println();
//        Submission submission1 = submission.inspect();
//        System.out.println(submission1.getSelfText());
//        System.out.println(submission1.getUrl());
//        System.out.println(submission1.getTitle());
//        System.out.println(submission1.getAuthor());
//        System.out.println(submission1.getCreated());
        System.out.println("-----------------------------------------------------------------");
    }
}

我现在提出两个请求,第一个是reddit.me().about();,第二个是reddit.submission("https://www.reddit.com/r/diabetes/comments/9rlkdm/ shady_insurance_work_around_to_pay_for_my_dexcom/");

输出为:

a
[1 ->] GET https://oauth.reddit.com/api/v1/me?raw_json=1
[<- 1] 200 application/json: '{"is_employee": false, "seen_layout_switch": true, "has_visited_new_profile": false, "pref_no_profanity": true, "has_external_account": false, "pref_geopopular": "GL(...)
dummyName
[2 ->] GET https://oauth.reddit.com/comments/https%3A%2F%2Fwww.reddit.com%2Fr%2Fdiabetes%2Fcomments%2F9rlkdm%2Fshady_insurance_work_around_to_pay_for_my_dexcom%2F?sort=confidence&sr_detail=false&(...)
[<- 2] 400 application/json: '{"message": "Bad Request", "error": 400}'
Exception in thread "main" net.dean.jraw.ApiException: API returned error: 400 (Bad Request), relevant parameters: []
    at net.dean.jraw.models.internal.ObjectBasedApiExceptionStub.create(ObjectBasedApiExceptionStub.java:57)
    at net.dean.jraw.models.internal.ObjectBasedApiExceptionStub.create(ObjectBasedApiExceptionStub.java:33)
    at net.dean.jraw.RedditClient.request(RedditClient.kt:186)
    at net.dean.jraw.RedditClient.request(RedditClient.kt:219)
    at net.dean.jraw.RedditClient.request(RedditClient.kt:255)
    at net.dean.jraw.references.SubmissionReference.comments(SubmissionReference.kt:50)
    at net.dean.jraw.references.SubmissionReference.comments(SubmissionReference.kt:28)
    at Main.main(Main.java:36)
Caused by: net.dean.jraw.http.NetworkException: HTTP request created unsuccessful response: GET https://oauth.reddit.com/comments/https%3A%2F%2Fwww.reddit.com%2Fr%2Fdiabetes%2Fcomments%2F9rlkdm%2Fshady_insurance_work_around_to_pay_for_my_dexcom%2F?sort=confidence&sr_detail=false&raw_json=1 -> 400
    ... 6 more

因为它可以是我的第一个请求给我一个用户名的响应,但在第二个响应中,我得到一个错误的请求400。你知道吗

为了检查我的客户机ID和客户机secret是否正常工作,我使用pythonPRAW库执行了相同的请求。你知道吗

import praw
from praw.models import MoreComments

reddit = praw.Reddit(client_id=<same-as-in-java>, client_secret=<same-as-in-java>,
                    password=<same-as-in-java>, user_agent='crawl',
                    username="dummyName")


submission = reddit.submission(
    url='https://www.reddit.com/r/redditdev/comments/1x70wl/how_to_get_all_replies_to_a_comment/')

print(submission.selftext)
print(submission.url)
print(submission.title)
print(submission.author)
print(submission.created_utc)
print('-----------------------------------------------------------------')

这样就可以在没有任何错误的情况下获得所需的结果,因此客户机机密详细信息必须正常工作。你知道吗

我唯一的疑问是在java UserAgent userAgent = new UserAgent("crawl", "com.example.crawl", "v0.1", username);中创建用户代理。你知道吗

我遵循下面的link。你知道吗

target platform, the unique ID or the version到底是什么意思。我试图保持与链接中相同的格式。也使用与其他地方相同的用户名。另一方面,python中的用户代理是一个字符串crawl。你知道吗

请告诉我,如果我遗漏了什么,可能是什么问题。你知道吗

谢谢

另外,我想用java来做这个。不是Python。你知道吗


Tags: httpscomsubmissionnetjavaoutsystemcomments
1条回答
网友
1楼 · 发布于 2024-09-29 19:36:06

由于您的第一个查询正在运行,因此凭据是正确的。在JRAW中,在submission函数中不提供整个URL,只提供id。你知道吗

改变这个

SubmissionReference submission = reddit.submission("https://www.reddit.com/r/diabetes/comments/9rlkdm/shady_insurance_work_around_to_pay_for_my_dexcom/");

为了这个

SubmissionReference submission = reddit.submission("9rlkdm");

其中id是URL中/comment/之后的随机字符串。你知道吗

希望这有帮助。你知道吗

相关问题 更多 >

    热门问题