首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环通过Rocket.Chat API

循环通过Rocket.Chat API
EN

Stack Overflow用户
提问于 2019-03-04 14:00:22
回答 1查看 780关注 0票数 3

Python3.7.2 PyCharm

我对Python和API交互相当陌生;我试图遍历Rocket Chat的API,特别是拔出用户电子邮件地址。与我所能找到的几乎每一个例子不同,Rocket不使用任何像"Next“这样的构造-它使用计数和偏移,实际上,这可能会使这更容易。我已经成功地完成了这个工作的第一部分,遍历了JSON并收到了电子邮件。我需要做的是循环通过API端点--这就是我遇到的一些问题。

我看过这个答案Unable to loop through paged API responses with Python,因为它似乎非常接近我想要的,但我无法使它正确地工作。

下面的代码就是我现在拥有的代码;显然,它还没有在API端点上执行任何循环,它只是在返回的json上循环。

代码语言:javascript
复制
import os
import csv
import requests
import json

url = "https://rocketchat.internal.net"
login = "/api/v1/login"
rocketchatusers = "/api/v1/users.list"
#offset = "?count=500&offset=0"


class API:

    def userlist(self, userid, token):
        headers = {'X-Auth-Token': token, 'X-User-Id': userid}
        rocketusers = requests.get(url + rocketchatusers, headers=headers, verify=False)
        print('Status Code:' + str(rocketusers.status_code))
        print('Content Type:' + rocketusers.headers['content-type'])
        userlist = json.loads(rocketusers.text)
        x = 0
        y = 0
        emails = open('emails', 'w')
        while y == 0:
            try:
                for i in userlist:
                    print(userlist['users'][x]['emails'][0]['address'], file=emails)
                    # print(userlist['users'][x]['emails'][0]['address'])
                    x += 1
            except KeyError:
                print("This user has no email address", file=emails)
                x += 1
            except IndexError:
                print("End of List")
                emails.close()
                y += 1

我已经尝试了什么,我想做什么,是类似于一个容易循环的东西。现实中可能有很多方法来做我想要做的事情,我只是不知道。

就像这样:

代码语言:javascript
复制
import os
import csv
import requests
import json

url = "https://rocketchat.internal.net"
login = "/api/v1/login"
rocketchatusers = "/api/v1/users.list"
offset = "?count=500&offset="+p
p = 0

class API:

    def userlist(self, userid, token):
        headers = {'X-Auth-Token': token, 'X-User-Id': userid}
        rocketusers = requests.get(url + rocketchatusers+offset, headers=headers, verify=False)

        for r in rocketusers:
            print('Status Code:' + str(rocketusers.status_code))
            print('Content Type:' + rocketusers.headers['content-type'])
            userlist = json.loads(rocketusers.text)
            x = 0
            y = 0
            emails = open('emails', 'w')
            while y == 0:
                try:
                    for i in userlist:
                        print(userlist['users'][x]['emails'][0]['address'], file=emails)
                        # print(userlist['users'][x]['emails'][0]['address'])
                        x += 1
                except KeyError:
                    print("This user has no email address", file=emails)
                    x += 1
                except IndexError:
                    print("End of List")
                    emails.close()
                    y += 1
        p += 500

现在,显然这不起作用,否则我不会张贴,但原因是它不工作是问题。get报告的错误是,当需要STR时,我无法连接一个INT。好吧,好吧。当我尝试这样的事情时:

str(p = 0)我得到一个类型错误。我也尝试过很多其他的东西,其中很多都很愚蠢,比如p= [],p= {}和其他更激进的想法。

URL (如果不是所有变量和连接的话)如下所示:

代码语言:javascript
复制
https://rocketchat.internal.net/api/v1/users.list?count=500&offset=0
https://rocketchat.internal.net/api/v1/users.list?count=500&offset=500
https://rocketchat.internal.net/api/v1/users.list?count=500&offset=1000
https://rocketchat.internal.net/api/v1/users.list?count=500&offset=1500

我觉得我错过了一些很简单的东西。我相当肯定,答案是对我列出的帖子的回应,但我无法让它发挥作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-06 19:31:29

所以,在四处打听之后,我发现我一直在正确的道路上解决这个问题,我只是在错误的地方尝试。我的结局是:

代码语言:javascript
复制
def userlist(self, userid, token):
    p = 0
    while p <= 7500:
        if not os.path.exists('./emails'):
            headers = {'X-Auth-Token': token, 'X-User-Id': userid}
            rocketusers = requests.get(url + rocketchatusers + offset + str(p), headers=headers, verify=False)
            print('Status Code:' + str(rocketusers.status_code))
            print('Content Type:' + rocketusers.headers['content-type'])
            print('Creating the file "emails" to use to compare against list of regulated users.')
            print(url + rocketchatusers + offset + str(p))
            userlist = json.loads(rocketusers.text)
            x = 0
            y = 0
            emails = open('emails', 'a+')
            while y == 0:
                try:
                    for i in userlist:
                        #print(userlist['users'][x]['emails'][0]['address'], file=emails)
                        print(userlist['users'][x]['ldap'], file=emails)
                        print(userlist['users'][x]['username'], file=emails)
                        x += 1
                except KeyError:
                    x += 1
                except IndexError:
                    print("End of List")
                    emails.close()
                    p += 50
                    y += 1
        else:
            headers = {'X-Auth-Token': token, 'X-User-Id': userid}
            rocketusers = requests.get(url + rocketchatusers + offset + str(p), headers=headers, verify=False)
            print('Status Code:' + str(rocketusers.status_code))
            print('Content Type:' + rocketusers.headers['content-type'])
            print('Populating file "emails" - this takes a few moments, please be patient.')
            print(url + rocketchatusers + offset + str(p))
            userlist = json.loads(rocketusers.text)
            x = 0
            z = 0
            emails = open('emails', 'a+')
            while z == 0:
                try:
                    for i in userlist:
                        #print(userlist['users'][x]['emails'][0]['address'], file=emails)
                        print(userlist['users'][x]['ldap'], file=emails)
                        print(userlist['users'][x]['username'], file=emails)
                        x += 1
                except KeyError:
                    x += 1
                except IndexError:
                    print("End of List")
                    emails.close()
                    p += 50
                    z += 1

这仍是一项正在进行的工作,不幸的是,这并不是一个协作的途径,稍后我可能会将其发布到GitHub,以便其他人能够看到它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54984824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档