{
  "http_interactions": [
    {
      "recorded_at": "2016-07-12T17:11:28",
      "request": {
        "body": {
          "encoding": "utf-8",
          "string": "grant_type=client_credentials"
        },
        "headers": {
          "Accept": "*/*",
          "Accept-Encoding": "identity",
          "Authorization": "Basic <BASIC_AUTH>",
          "Connection": "keep-alive",
          "Content-Length": "29",
          "Content-Type": "application/x-www-form-urlencoded",
          "User-Agent": "<USER_AGENT> PRAW/4.0.0b8 prawcore/0.0.10"
        },
        "method": "POST",
        "uri": "https://www.reddit.com/api/v1/access_token"
      },
      "response": {
        "body": {
          "encoding": "UTF-8",
          "string": "{\"access_token\": \"rhyKqO9iSsQ6uxZQANhF1NMRE8w\", \"token_type\": \"bearer\", \"expires_in\": 3600, \"scope\": \"*\"}"
        },
        "headers": {
          "CF-RAY": "2c161d5140c92975-DUB",
          "Connection": "keep-alive",
          "Content-Length": "105",
          "Content-Type": "application/json; charset=UTF-8",
          "Date": "Tue, 12 Jul 2016 17:11:28 GMT",
          "Server": "cloudflare-nginx",
          "Set-Cookie": "__cfduid=dec0f98f2944a5a1f2cab3ee1c61eade11468343488; expires=Wed, 12-Jul-17 17:11:28 GMT; path=/; domain=.reddit.com; HttpOnly",
          "Strict-Transport-Security": "max-age=15552000; includeSubDomains; preload",
          "X-Moose": "majestic",
          "cache-control": "max-age=0, must-revalidate",
          "x-content-type-options": "nosniff",
          "x-frame-options": "SAMEORIGIN",
          "x-xss-protection": "1; mode=block"
        },
        "status": {
          "code": 200,
          "message": "OK"
        },
        "url": "https://www.reddit.com/api/v1/access_token"
      }
    },
    {
      "recorded_at": "2016-07-12T17:11:28",
      "request": {
        "body": {
          "encoding": "utf-8",
          "string": ""
        },
        "headers": {
          "Accept": "*/*",
          "Accept-Encoding": "identity",
          "Authorization": "bearer rhyKqO9iSsQ6uxZQANhF1NMRE8w",
          "Connection": "keep-alive",
          "Cookie": "loid=d7kvEDwJtYdRT1phrM; __cfduid=dec0f98f2944a5a1f2cab3ee1c61eade11468343488; loidcreated=2016-07-12T17%3A11%3A28.295Z",
          "User-Agent": "<USER_AGENT> PRAW/4.0.0b8 prawcore/0.0.10"
        },
        "method": "GET",
        "uri": "https://oauth.reddit.com/r/all/search/?sort=relevance&raw_json=1&syntax=cloudsearch&t=all&restrict_sr=False&limit=1024&q=praw+oauth+search"
      },
      "response": {
        "body": {
          "encoding": "UTF-8",
          "string": "{\"kind\": \"Listing\", \"data\": {\"facets\": {}, \"modhash\": \"\", \"children\": [{\"kind\": \"t3\", \"data\": {\"domain\": \"self.redditdev\", \"banned_by\": null, \"media_embed\": {}, \"subreddit\": \"redditdev\", \"selftext_html\": \"\\u003C!-- SC_OFF --\\u003E\\u003Cdiv class=\\\"md\\\"\\u003E\\u003Ch1\\u003Esolved\\u003C/h1\\u003E\\n\\n\\u003Cp\\u003EProblem solved with this: \\u003Ca href=\\\"/r/redditdev/comments/3gpbiu/prawoauth2util_problem_using_get_banned_raise/cu1b1nc\\\"\\u003E/r/redditdev/comments/3gpbiu/prawoauth2util_problem_using_get_banned_raise/cu1b1nc\\u003C/a\\u003E\\u003C/p\\u003E\\n\\n\\u003Chr/\\u003E\\n\\n\\u003Cp\\u003EI am a moderator of \\u003Ca href=\\\"/r/Europe\\\"\\u003E/r/Europe\\u003C/a\\u003E, and I am trying to get a list of the banned accounts on this subreddit.\\u003C/p\\u003E\\n\\n\\u003Cp\\u003EI am using PRAW and praw-OAuth2Util with python3.4 on Debian, from pip:\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E# pip3 search praw\\npraw-oauth2util     - OAuth2 wrapper for PRAW\\n  INSTALLED: 0.2.2 (latest)\\nprawtools           - A collection of utilities that utilize the reddit API.\\n  INSTALLED: 0.19 (latest)\\nprawoauth2          - Library to make your life easier using OAuth2 for PRAW\\npraw                - PRAW, an acronym for `Python Reddit API Wrapper`, is a python package that allows for simple access to reddit\\u0026#39;s API.\\n  INSTALLED: 3.1.0 (latest)\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003EFor Reddit\\u2019s oauth, the app is declared as a script, and all scopes are given to it.\\u003C/p\\u003E\\n\\n\\u003Cp\\u003EI fail to see where my mistake is. Help?\\u003C/p\\u003E\\n\\n\\u003Chr/\\u003E\\n\\n\\u003Cp\\u003Edemo.py\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E#!/usr/bin/env /usr/bin/python3.4\\n# -*- coding: utf-8 -*-\\n\\nimport praw\\nimport OAuth2Util\\n\\n###\\n# connexion\\n\\nprint(\\u0026quot;connexion\\u2026\\u0026quot;, end=\\u0026quot; \\u0026quot;)\\n\\nr = praw.Reddit(user_agent=\\u0026quot;posix:eu.clauzel.couteau-suisse:v0 (by /u/dClauzel)\\u0026quot;,\\n        log_requests=1,\\n        api_request_delay=4.0,\\n        timeout=300.0,\\n        site_name=\\u0026quot;dClauzel\\u0026quot;)\\n\\no = OAuth2Util.OAuth2Util(r, print_log=True)\\no.refresh()\\nprint(\\u0026quot;connect\\u00e9.\\u0026quot;)\\n\\n###\\n# informations utilisateur\\nprint(\\u0026quot;Je suis {0} et j\\u2019ai un karma de {1} pour mes commentaires.\\u0026quot;.format(r.get_me().name, r.get_me().comment_karma) )\\n\\n###\\n# top des 5 soumissions populaires\\n\\nprint(\\u0026quot;Top 5\\u0026quot;)\\n\\nsousjlailu = r.get_subreddit(\\u0026quot;Europe\\u0026quot;, fetch=True)\\nfor soumission in sousjlailu.get_hot(limit=5):\\n        print(\\u0026quot; - {0} \\u2014 {1} \\u2014 {2}\\u0026quot;.format(\\n                soumission.title,\\n                soumission.author,\\n                soumission.url) )\\n\\n###\\n# bannissements\\nprint(\\u0026quot;Liste des bannis\\u0026quot;)\\n\\nbannis = sousjlailu.get_banned()\\nbannis = [x for x in bannis]\\nprint(bannis)\\n\\n###\\n# nettoyage\\nprint(\\u0026quot;fin\\u0026quot;)\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Chr/\\u003E\\n\\n\\u003Cp\\u003Eoauth.txt\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E# Config\\nscope=identity,account,edit,flair,history,livemanage,modconfig,modflair,modlog,modothers,modposts,modself,modwiki,mysubreddits,privatemessages,read,report,save,submit,subscribe,vote,wikiedit,wikiread\\nrefreshable=True\\n\\n# Appinfo\\napp_key=*redacted*\\napp_secret=*redacted*\\n\\n# Token\\ntoken=*redacted*\\nrefresh_token=*redacted*\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Chr/\\u003E\\n\\n\\u003Cp\\u003Epraw.ini\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E# -*- coding: utf-8 -*-\\n\\n[dClauzel]\\ncheck_for_updates: True\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Chr/\\u003E\\n\\n\\u003Cp\\u003ERunning the program:\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E$ ./demo.py\\nsubstituting https://oauth.reddit.com for https://api.reddit.com in url\\nGET: https://oauth.reddit.com/api/v1/me.json\\nconnexion\\u2026 connect\\u00e9.\\nsubstituting https://oauth.reddit.com for https://api.reddit.com in url\\nGET: https://oauth.reddit.com/api/v1/me.json\\nsubstituting https://oauth.reddit.com for https://api.reddit.com in url\\nGET: https://oauth.reddit.com/api/v1/me.json\\nJe suis dClauzel et j\\u2019ai un karma de 15936 pour mes commentaires.\\nTop 5\\nsubstituting https://oauth.reddit.com for https://api.reddit.com in url\\nGET: https://oauth.reddit.com/r/Europe/about/.json\\nsubstituting https://oauth.reddit.com for https://api.reddit.com in url\\nGET: https://oauth.reddit.com/r/europe/.json\\n        - Immigration Megathread - Part VI \\u2014 ModeratorsOfEurope \\u2014 http://www.reddit.com/r/europe/comments/3frno2/immigration_megathread_part_vi/\\n        - Sweden boosts security for asylum seekers after IKEA knife attack; two Eritrean suspects detained \\u2014 Chunkeeguy \\u2014 http://www.abc.net.au/news/2015-08-12/sweden-boosts-security-for-asylum-seekers-after-ikea-attack/6690180\\n        - A reminder that there is an active war going on in Eastern Europe. Pro-Russian separatists film one of their unsuccessful attacks on Ukrainian positions. \\u2014 RabbitOfCaerbanog \\u2014 https://www.youtube.com/watch?v=0N0rplcH32g\\u0026amp;t=241\\n        - A creeping occupation in action: Russian forces again move the border with Georgia, this time a further 800 meters into the Georgian territory. \\u2014 RabbitOfCaerbanog \\u2014 https://www.youtube.com/watch?v=l1HUk2LEJxU\\n        - The European Union wastes about 22 million tonnes of food a year and Britain wastes the most, according to a study by European Commission-backed researchers. \\u2014 Libertatea \\u2014 http://www.reuters.com/article/2015/08/11/europe-food-waste-idINKCN0QG2DB20150811?feedType=RSS\\u0026amp;feedName=worldNews\\nListe des bannis\\nGET: https://api.reddit.com/r/europe/about/banned/.json\\nTraceback (most recent call last):\\n  File \\u0026quot;./demo.py\\u0026quot;, line 43, in \\u0026lt;module\\u0026gt;\\n    bannis = [x for x in bannis]\\n  File \\u0026quot;./demo.py\\u0026quot;, line 43, in \\u0026lt;listcomp\\u0026gt;\\n    bannis = [x for x in bannis]\\n  File \\u0026quot;/usr/local/lib/python3.4/dist-packages/praw/__init__.py\\u0026quot;, line 1811, in _get_userlist\\n    for data in content:\\n  File \\u0026quot;/usr/local/lib/python3.4/dist-packages/praw/__init__.py\\u0026quot;, line 524, in get_content\\n    page_data = self.request_json(url, params=params)\\n  File \\u0026quot;/usr/local/lib/python3.4/dist-packages/praw/decorators.py\\u0026quot;, line 173, in wrapped\\n    return_value = function(reddit_session, *args, **kwargs)\\n  File \\u0026quot;/usr/local/lib/python3.4/dist-packages/praw/__init__.py\\u0026quot;, line 579, in request_json\\n    retry_on_error=retry_on_error)\\n  File \\u0026quot;/usr/local/lib/python3.4/dist-packages/praw/__init__.py\\u0026quot;, line 424, in _request\\n    _raise_response_exceptions(response)\\n  File \\u0026quot;/usr/local/lib/python3.4/dist-packages/praw/internal.py\\u0026quot;, line 196, in _raise_response_exceptions\\n    raise Forbidden(_raw=response)\\npraw.errors.Forbidden\\nsys:1: ResourceWarning: unclosed \\u0026lt;ssl.SSLSocket fd=4, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=(\\u0026#39;92.222.28.243\\u0026#39;, 58951), raddr=(\\u0026#39;198.41.209.143\\u0026#39;, 443)\\u0026gt;\\n/usr/lib/python3.4/importlib/_bootstrap.py:2150: ImportWarning: sys.meta_path is empty\\nsys:1: ResourceWarning: unclosed \\u0026lt;ssl.SSLSocket fd=5, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=(\\u0026#39;92.222.28.243\\u0026#39;, 56974), raddr=(\\u0026#39;198.41.208.138\\u0026#39;, 443)\\u0026gt;\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Chr/\\u003E\\n\\u003C/div\\u003E\\u003C!-- SC_ON --\\u003E\", \"selftext\": \"# solved\\n\\nProblem solved with this: /r/redditdev/comments/3gpbiu/prawoauth2util_problem_using_get_banned_raise/cu1b1nc\\n\\n----\\n\\nI am a moderator of /r/Europe, and I am trying to get a list of the banned accounts on this subreddit.\\n\\nI am using PRAW and praw-OAuth2Util with python3.4 on Debian, from pip:\\n\\n    # pip3 search praw\\n    praw-oauth2util     - OAuth2 wrapper for PRAW\\n      INSTALLED: 0.2.2 (latest)\\n    prawtools           - A collection of utilities that utilize the reddit API.\\n      INSTALLED: 0.19 (latest)\\n    prawoauth2          - Library to make your life easier using OAuth2 for PRAW\\n    praw                - PRAW, an acronym for `Python Reddit API Wrapper`, is a python package that allows for simple access to reddit's API.\\n      INSTALLED: 3.1.0 (latest)\\n\\nFor Reddit\\u2019s oauth, the app is declared as a script, and all scopes are given to it.\\n\\nI fail to see where my mistake is. Help?\\n\\n----\\n\\ndemo.py\\n\\n    #!/usr/bin/env /usr/bin/python3.4\\n    # -*- coding: utf-8 -*-\\n    \\n    import praw\\n    import OAuth2Util\\n    \\n    ###\\n    # connexion\\n    \\n    print(\\\"connexion\\u2026\\\", end=\\\" \\\")\\n    \\n    r = praw.Reddit(user_agent=\\\"posix:eu.clauzel.couteau-suisse:v0 (by /u/dClauzel)\\\",\\n            log_requests=1,\\n            api_request_delay=4.0,\\n            timeout=300.0,\\n            site_name=\\\"dClauzel\\\")\\n    \\n    o = OAuth2Util.OAuth2Util(r, print_log=True)\\n    o.refresh()\\n    print(\\\"connect\\u00e9.\\\")\\n    \\n    ###\\n    # informations utilisateur\\n    print(\\\"Je suis {0} et j\\u2019ai un karma de {1} pour mes commentaires.\\\".format(r.get_me().name, r.get_me().comment_karma) )\\n    \\n    ###\\n    # top des 5 soumissions populaires\\n    \\n    print(\\\"Top 5\\\")\\n    \\n    sousjlailu = r.get_subreddit(\\\"Europe\\\", fetch=True)\\n    for soumission in sousjlailu.get_hot(limit=5):\\n            print(\\\" - {0} \\u2014 {1} \\u2014 {2}\\\".format(\\n                    soumission.title,\\n                    soumission.author,\\n                    soumission.url) )\\n    \\n    ###\\n    # bannissements\\n    print(\\\"Liste des bannis\\\")\\n    \\n    bannis = sousjlailu.get_banned()\\n    bannis = [x for x in bannis]\\n    print(bannis)\\n    \\n    ###\\n    # nettoyage\\n    print(\\\"fin\\\")\\n\\n----\\n\\noauth.txt\\n\\n    # Config\\n    scope=identity,account,edit,flair,history,livemanage,modconfig,modflair,modlog,modothers,modposts,modself,modwiki,mysubreddits,privatemessages,read,report,save,submit,subscribe,vote,wikiedit,wikiread\\n    refreshable=True\\n    \\n    # Appinfo\\n    app_key=*redacted*\\n    app_secret=*redacted*\\n    \\n    # Token\\n    token=*redacted*\\n    refresh_token=*redacted*\\n\\n----\\n\\npraw.ini\\n\\n    # -*- coding: utf-8 -*-\\n    \\n    [dClauzel]\\n    check_for_updates: True\\n\\n----\\n\\nRunning the program:\\n\\n    $ ./demo.py\\n    substituting https://oauth.reddit.com for https://api.reddit.com in url\\n    GET: https://oauth.reddit.com/api/v1/me.json\\n    connexion\\u2026 connect\\u00e9.\\n    substituting https://oauth.reddit.com for https://api.reddit.com in url\\n    GET: https://oauth.reddit.com/api/v1/me.json\\n    substituting https://oauth.reddit.com for https://api.reddit.com in url\\n    GET: https://oauth.reddit.com/api/v1/me.json\\n    Je suis dClauzel et j\\u2019ai un karma de 15936 pour mes commentaires.\\n    Top 5\\n    substituting https://oauth.reddit.com for https://api.reddit.com in url\\n    GET: https://oauth.reddit.com/r/Europe/about/.json\\n    substituting https://oauth.reddit.com for https://api.reddit.com in url\\n    GET: https://oauth.reddit.com/r/europe/.json\\n            - Immigration Megathread - Part VI \\u2014 ModeratorsOfEurope \\u2014 http://www.reddit.com/r/europe/comments/3frno2/immigration_megathread_part_vi/\\n            - Sweden boosts security for asylum seekers after IKEA knife attack; two Eritrean suspects detained \\u2014 Chunkeeguy \\u2014 http://www.abc.net.au/news/2015-08-12/sweden-boosts-security-for-asylum-seekers-after-ikea-attack/6690180\\n            - A reminder that there is an active war going on in Eastern Europe. Pro-Russian separatists film one of their unsuccessful attacks on Ukrainian positions. \\u2014 RabbitOfCaerbanog \\u2014 https://www.youtube.com/watch?v=0N0rplcH32g\\u0026t=241\\n            - A creeping occupation in action: Russian forces again move the border with Georgia, this time a further 800 meters into the Georgian territory. \\u2014 RabbitOfCaerbanog \\u2014 https://www.youtube.com/watch?v=l1HUk2LEJxU\\n            - The European Union wastes about 22 million tonnes of food a year and Britain wastes the most, according to a study by European Commission-backed researchers. \\u2014 Libertatea \\u2014 http://www.reuters.com/article/2015/08/11/europe-food-waste-idINKCN0QG2DB20150811?feedType=RSS\\u0026feedName=worldNews\\n    Liste des bannis\\n    GET: https://api.reddit.com/r/europe/about/banned/.json\\n    Traceback (most recent call last):\\n      File \\\"./demo.py\\\", line 43, in \\u003Cmodule\\u003E\\n        bannis = [x for x in bannis]\\n      File \\\"./demo.py\\\", line 43, in \\u003Clistcomp\\u003E\\n        bannis = [x for x in bannis]\\n      File \\\"/usr/local/lib/python3.4/dist-packages/praw/__init__.py\\\", line 1811, in _get_userlist\\n        for data in content:\\n      File \\\"/usr/local/lib/python3.4/dist-packages/praw/__init__.py\\\", line 524, in get_content\\n        page_data = self.request_json(url, params=params)\\n      File \\\"/usr/local/lib/python3.4/dist-packages/praw/decorators.py\\\", line 173, in wrapped\\n        return_value = function(reddit_session, *args, **kwargs)\\n      File \\\"/usr/local/lib/python3.4/dist-packages/praw/__init__.py\\\", line 579, in request_json\\n        retry_on_error=retry_on_error)\\n      File \\\"/usr/local/lib/python3.4/dist-packages/praw/__init__.py\\\", line 424, in _request\\n        _raise_response_exceptions(response)\\n      File \\\"/usr/local/lib/python3.4/dist-packages/praw/internal.py\\\", line 196, in _raise_response_exceptions\\n        raise Forbidden(_raw=response)\\n    praw.errors.Forbidden\\n    sys:1: ResourceWarning: unclosed \\u003Cssl.SSLSocket fd=4, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('92.222.28.243', 58951), raddr=('198.41.209.143', 443)\\u003E\\n    /usr/lib/python3.4/importlib/_bootstrap.py:2150: ImportWarning: sys.meta_path is empty\\n    sys:1: ResourceWarning: unclosed \\u003Cssl.SSLSocket fd=5, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('92.222.28.243', 56974), raddr=('198.41.208.138', 443)\\u003E\\n\\n----\", \"likes\": null, \"suggested_sort\": null, \"user_reports\": [], \"secure_media\": null, \"link_flair_text\": null, \"id\": \"3gpbiu\", \"from_kind\": null, \"gilded\": 0, \"archived\": true, \"clicked\": false, \"report_reasons\": null, \"author\": \"dClauzel\", \"media\": null, \"score\": 0, \"approved_by\": null, \"over_18\": false, \"hidden\": false, \"num_comments\": 21, \"thumbnail\": \"\", \"subreddit_id\": \"t5_2qizd\", \"hide_score\": false, \"edited\": 1439447718.0, \"link_flair_css_class\": null, \"author_flair_css_class\": null, \"downs\": 0, \"secure_media_embed\": {}, \"saved\": false, \"removal_reason\": null, \"stickied\": false, \"from\": null, \"is_self\": true, \"from_id\": null, \"permalink\": \"/r/redditdev/comments/3gpbiu/prawoauth2util_problem_using_get_banned_raise/?ref=search_posts\", \"locked\": false, \"name\": \"t3_3gpbiu\", \"created\": 1439399314.0, \"url\": \"https://www.reddit.com/r/redditdev/comments/3gpbiu/prawoauth2util_problem_using_get_banned_raise/\", \"author_flair_text\": null, \"quarantine\": false, \"title\": \"[PRAW][OAuth2Util] Problem using get_banned() : raise Forbidden(_raw=response)\", \"created_utc\": 1439370514.0, \"distinguished\": null, \"mod_reports\": [], \"visited\": false, \"num_reports\": null, \"ups\": 0}}, {\"kind\": \"t3\", \"data\": {\"domain\": \"self.redditdev\", \"banned_by\": null, \"media_embed\": {}, \"subreddit\": \"redditdev\", \"selftext_html\": \"\\u003C!-- SC_OFF --\\u003E\\u003Cdiv class=\\\"md\\\"\\u003E\\u003Cp\\u003EAs the title says.  I have done a bit of looking around and I can\\u0026#39;t seem to find an easy way of doing this.  I am simply looking to return a list of my own subscribed subs and then do a quick search through each of them.\\u003C/p\\u003E\\n\\n\\u003Cp\\u003EThanks\\u003C/p\\u003E\\n\\u003C/div\\u003E\\u003C!-- SC_ON --\\u003E\", \"selftext\": \"As the title says.  I have done a bit of looking around and I can't seem to find an easy way of doing this.  I am simply looking to return a list of my own subscribed subs and then do a quick search through each of them.\\n\\nThanks\", \"likes\": null, \"suggested_sort\": null, \"user_reports\": [], \"secure_media\": null, \"link_flair_text\": null, \"id\": \"3x4kt2\", \"from_kind\": null, \"gilded\": 0, \"archived\": true, \"clicked\": false, \"report_reasons\": null, \"author\": \"GrinningMouth38\", \"media\": null, \"score\": 2, \"approved_by\": null, \"over_18\": false, \"hidden\": false, \"num_comments\": 5, \"thumbnail\": \"\", \"subreddit_id\": \"t5_2qizd\", \"hide_score\": false, \"edited\": false, \"link_flair_css_class\": null, \"author_flair_css_class\": null, \"downs\": 0, \"secure_media_embed\": {}, \"saved\": false, \"removal_reason\": null, \"stickied\": false, \"from\": null, \"is_self\": true, \"from_id\": null, \"permalink\": \"/r/redditdev/comments/3x4kt2/praw_is_there_an_easy_way_of_getting_a_list_of/?ref=search_posts\", \"locked\": false, \"name\": \"t3_3x4kt2\", \"created\": 1450328586.0, \"url\": \"https://www.reddit.com/r/redditdev/comments/3x4kt2/praw_is_there_an_easy_way_of_getting_a_list_of/\", \"author_flair_text\": null, \"quarantine\": false, \"title\": \"[PRAW] Is there an easy way of getting a list of the subreddits I am subscribed to, without using OAuth?\", \"created_utc\": 1450299786.0, \"distinguished\": null, \"mod_reports\": [], \"visited\": false, \"num_reports\": null, \"ups\": 2}}, {\"kind\": \"t3\", \"data\": {\"domain\": \"self.learnpython\", \"banned_by\": null, \"media_embed\": {}, \"subreddit\": \"learnpython\", \"selftext_html\": \"\\u003C!-- SC_OFF --\\u003E\\u003Cdiv class=\\\"md\\\"\\u003E\\u003Cp\\u003EFirst off, I don\\u0026#39;t want to use PRAW. I wanna do this as a bit of a learning exercise for myself.\\u003C/p\\u003E\\n\\n\\u003Cp\\u003EI have script I\\u0026#39;m running that iterates through the new section of a subreddit that collects the first 1000 posts, although some of them are duplicates, maybe 20 or so. I realise that the reddit api prevents displaying more than 1000 at a time? Is there any way to get around this, I saw mention somewhere that that\\u0026#39;s only when an account isn\\u0026#39;t logged in, so if I were to use the mechanize module or something, would that solve that problem and allow scraping further back in time?\\u003C/p\\u003E\\n\\n\\u003Cp\\u003EOr would anyone have any leads into how to scrape for specific periods of time using the utc time variable in the submission json?\\u003C/p\\u003E\\n\\n\\u003Cp\\u003EUPDATE - \\u003C/p\\u003E\\n\\n\\u003Cp\\u003ESo I\\u0026#39;ve continued on doing this and to help the next person who has a similar problem: \\nThe 1000 limit on Reddit\\u0026#39;s output. As per the PRAW docs, that\\u0026#39;s an upstream limitation and there\\u0026#39;s nothing that can be done about it.\\u003C/p\\u003E\\n\\n\\u003Cp\\u003ETo authenticate your script this covers it pretty well - \\u003Ca href=\\\"https://github.com/reddit/reddit/wiki/OAuth2-Quick-Start-Example\\\"\\u003Ehttps://github.com/reddit/reddit/wiki/OAuth2-Quick-Start-Example\\u003C/a\\u003E \\nThe example only covers \\u0026quot;\\u003Ca href=\\\"https://oauth.reddit.com/api/v1/me\\\"\\u003Ehttps://oauth.reddit.com/api/v1/me\\u003C/a\\u003E\\u0026quot; which prints your own account info, to pull from a subreddit, use something like \\u0026quot;\\u003Ca href=\\\"https://oauth.reddit.com/r/learnpython\\\"\\u003Ehttps://oauth.reddit.com/r/learnpython\\u003C/a\\u003E\\u0026quot;\\u003C/p\\u003E\\n\\n\\u003Cp\\u003ESo to collect all data from a time period (or at least most data) you can use something like timestamp searching as discussed here \\u003Ca href=\\\"https://www.reddit.com/r/help/comments/2pempf/is_there_a_way_to_search_for_links_posted_during/\\\"\\u003Ehttps://www.reddit.com/r/help/comments/2pempf/is_there_a_way_to_search_for_links_posted_during/\\u003C/a\\u003E\\u003C/p\\u003E\\n\\u003C/div\\u003E\\u003C!-- SC_ON --\\u003E\", \"selftext\": \"First off, I don't want to use PRAW. I wanna do this as a bit of a learning exercise for myself.\\n\\nI have script I'm running that iterates through the new section of a subreddit that collects the first 1000 posts, although some of them are duplicates, maybe 20 or so. I realise that the reddit api prevents displaying more than 1000 at a time? Is there any way to get around this, I saw mention somewhere that that's only when an account isn't logged in, so if I were to use the mechanize module or something, would that solve that problem and allow scraping further back in time?\\n\\nOr would anyone have any leads into how to scrape for specific periods of time using the utc time variable in the submission json?\\n\\nUPDATE - \\n\\nSo I've continued on doing this and to help the next person who has a similar problem: \\nThe 1000 limit on Reddit's output. As per the PRAW docs, that's an upstream limitation and there's nothing that can be done about it.\\n\\nTo authenticate your script this covers it pretty well - https://github.com/reddit/reddit/wiki/OAuth2-Quick-Start-Example \\nThe example only covers \\\"https://oauth.reddit.com/api/v1/me\\\" which prints your own account info, to pull from a subreddit, use something like \\\"https://oauth.reddit.com/r/learnpython\\\"\\n\\nSo to collect all data from a time period (or at least most data) you can use something like timestamp searching as discussed here https://www.reddit.com/r/help/comments/2pempf/is_there_a_way_to_search_for_links_posted_during/\", \"likes\": null, \"suggested_sort\": null, \"user_reports\": [], \"secure_media\": null, \"link_flair_text\": null, \"id\": \"3b4erh\", \"from_kind\": null, \"gilded\": 0, \"archived\": true, \"clicked\": false, \"report_reasons\": null, \"author\": \"Ouiski\", \"media\": null, \"score\": 2, \"approved_by\": null, \"over_18\": false, \"hidden\": false, \"num_comments\": 13, \"thumbnail\": \"\", \"subreddit_id\": \"t5_2r8ot\", \"hide_score\": false, \"edited\": 1436258555.0, \"link_flair_css_class\": null, \"author_flair_css_class\": null, \"downs\": 0, \"secure_media_embed\": {}, \"saved\": false, \"removal_reason\": null, \"stickied\": false, \"from\": null, \"is_self\": true, \"from_id\": null, \"permalink\": \"/r/learnpython/comments/3b4erh/collecting_submission_data_from_reddit/?ref=search_posts\", \"locked\": false, \"name\": \"t3_3b4erh\", \"created\": 1435297598.0, \"url\": \"https://www.reddit.com/r/learnpython/comments/3b4erh/collecting_submission_data_from_reddit/\", \"author_flair_text\": null, \"quarantine\": false, \"title\": \"Collecting submission data from Reddit\", \"created_utc\": 1435268798.0, \"distinguished\": null, \"mod_reports\": [], \"visited\": false, \"num_reports\": null, \"ups\": 2}}, {\"kind\": \"t3\", \"data\": {\"domain\": \"self.redditdev\", \"banned_by\": null, \"media_embed\": {}, \"subreddit\": \"redditdev\", \"selftext_html\": \"\\u003C!-- SC_OFF --\\u003E\\u003Cdiv class=\\\"md\\\"\\u003E\\u003Cp\\u003EIs it possible to do this?\\u003C/p\\u003E\\n\\n\\u003Cp\\u003ESo instead of:\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003Ereddit_object.get_subreddit(\\u0026#39;redditdev\\u0026#39;)\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003EI would have something like: \\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003Ereddit_object.get_userpage(\\u0026#39;DAsSNipez\\u0026#39;)\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003EI\\u0026#39;ve looked at the documentation and the code overview but I find for the code overview at least it\\u0026#39;s incredibly hard to process and as I don\\u0026#39;t know if what I want to do is supported I have idea how to search for it.\\u003C/p\\u003E\\n\\n\\u003Cp\\u003EEdit: I\\u0026#39;ve tried using:\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003Ereddit_object.get_redditor(username)\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003EWhat I get back is this:\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E{\\u0026#39;_authentication\\u0026#39;: None,\\n \\u0026#39;_random_count\\u0026#39;: 0,\\n \\u0026#39;_use_oauth\\u0026#39;: False,\\n \\u0026#39;access_token\\u0026#39;: None,\\n \\u0026#39;client_id\\u0026#39;: None,\\n \\u0026#39;client_secret\\u0026#39;: None,\\n \\u0026#39;config\\u0026#39;: \\u0026lt;praw.Config object at 0x2acd050\\u0026gt;,\\n \\u0026#39;handler\\u0026#39;: \\u0026lt;praw.handlers.DefaultHandler object at 0x2acd310\\u0026gt;,\\n \\u0026#39;http\\u0026#39;: \\u0026lt;requests.sessions.Session object at 0x2acd750\\u0026gt;,\\n \\u0026#39;modhash\\u0026#39;: None,\\n \\u0026#39;redirect_uri\\u0026#39;: None,\\n \\u0026#39;refresh_token\\u0026#39;: None,\\n \\u0026#39;update_checked\\u0026#39;: True,\\n \\u0026#39;user\\u0026#39;: None}\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003EI don\\u0026#39;t \\u003Cem\\u003Ethink\\u003C/em\\u003E that\\u0026#39;s what I want, if it is then I have no idea how to get information from it.\\u003C/p\\u003E\\n\\u003C/div\\u003E\\u003C!-- SC_ON --\\u003E\", \"selftext\": \"Is it possible to do this?\\n\\nSo instead of:\\n\\n    reddit_object.get_subreddit('redditdev')\\n\\n I would have something like: \\n\\n    reddit_object.get_userpage('DAsSNipez')\\n\\nI've looked at the documentation and the code overview but I find for the code overview at least it's incredibly hard to process and as I don't know if what I want to do is supported I have idea how to search for it.\\n\\nEdit: I've tried using:\\n\\n    reddit_object.get_redditor(username)\\n\\nWhat I get back is this:\\n\\n    {'_authentication': None,\\n     '_random_count': 0,\\n     '_use_oauth': False,\\n     'access_token': None,\\n     'client_id': None,\\n     'client_secret': None,\\n     'config': \\u003Cpraw.Config object at 0x2acd050\\u003E,\\n     'handler': \\u003Cpraw.handlers.DefaultHandler object at 0x2acd310\\u003E,\\n     'http': \\u003Crequests.sessions.Session object at 0x2acd750\\u003E,\\n     'modhash': None,\\n     'redirect_uri': None,\\n     'refresh_token': None,\\n     'update_checked': True,\\n     'user': None}\\n\\n\\nI don't *think* that's what I want, if it is then I have no idea how to get information from it.\", \"likes\": null, \"suggested_sort\": null, \"user_reports\": [], \"secure_media\": null, \"link_flair_text\": null, \"id\": \"1qvzkd\", \"from_kind\": null, \"gilded\": 0, \"archived\": true, \"clicked\": false, \"report_reasons\": null, \"author\": \"DAsSNipez\", \"media\": null, \"score\": 2, \"approved_by\": null, \"over_18\": false, \"hidden\": false, \"num_comments\": 3, \"thumbnail\": \"\", \"subreddit_id\": \"t5_2qizd\", \"hide_score\": false, \"edited\": 1384771238.0, \"link_flair_css_class\": null, \"author_flair_css_class\": null, \"downs\": 0, \"secure_media_embed\": {}, \"saved\": false, \"removal_reason\": null, \"stickied\": false, \"from\": null, \"is_self\": true, \"from_id\": null, \"permalink\": \"/r/redditdev/comments/1qvzkd/praw_opening_a_user_page/?ref=search_posts\", \"locked\": false, \"name\": \"t3_1qvzkd\", \"created\": 1384799149.0, \"url\": \"https://www.reddit.com/r/redditdev/comments/1qvzkd/praw_opening_a_user_page/\", \"author_flair_text\": null, \"quarantine\": false, \"title\": \"Praw, opening a user page.\", \"created_utc\": 1384770349.0, \"distinguished\": null, \"mod_reports\": [], \"visited\": false, \"num_reports\": null, \"ups\": 2}}, {\"kind\": \"t3\", \"data\": {\"domain\": \"self.bugs\", \"banned_by\": null, \"media_embed\": {}, \"subreddit\": \"bugs\", \"selftext_html\": \"\\u003C!-- SC_OFF --\\u003E\\u003Cdiv class=\\\"md\\\"\\u003E\\u003Cp\\u003EI have confirmed this with PRAW, toolbox and API requests.\\u003C/p\\u003E\\n\\n\\u003Cp\\u003Ewhen  I try to get a full list of all the contributors to \\u003Ca href=\\\"/r/armyofscience\\\"\\u003E/r/armyofscience\\u003C/a\\u003E it does not return in the complete list.\\u003C/p\\u003E\\n\\n\\u003Cp\\u003Eexample code:  \\u003C/p\\u003E\\n\\n\\u003Cp\\u003EPRAW: \\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003Etarget_sub = \\u0026#39;armyofscience\\u0026#39;\\ntarget = r.get_subreddit(target_sub)\\ntarget_approved = target.get_contributors(limit=None)\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003Ereturns 2984 redditors\\u003C/p\\u003E\\n\\n\\u003Cp\\u003Eor the API code i just ran:\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003Eheaders={\\u0026quot;User-Agent\\u0026quot;:\\u0026quot;flair finder v1.0 by /u/Doomhammer458\\u0026quot;,\\u0026quot;Authorization\\u0026quot;:\\u0026quot;bearer \\u0026quot;+new_mod_access[\\u0026quot;access_token\\u0026quot;]}\\nc=0\\nfetch_count = 0\\nparams = {\\u0026quot;limit\\u0026quot;:1000}\\nuser_list = []\\nwhile True:\\n    c+=1\\n    url = \\u0026quot;https://oauth.reddit.com/r/armyofscience/about/contributors/\\u0026quot;\\n    print(params)\\n    req = requests.get(url,params=params,headers=headers)\\n    data = req.json()[\\u0026quot;data\\u0026quot;][\\u0026#39;children\\u0026#39;]\\n    for item in data:\\n        user = item[\\u0026#39;name\\u0026#39;]\\n        if user not in user_list:\\n            user_list.append(user)\\n        else:\\n            print(\\u0026quot;{} is already in the list!\\u0026quot;.format(user))\\n    data_length = len(data)\\n    fetch_count += data_length\\n    after = req.json()[\\u0026#39;data\\u0026#39;][\\u0026#39;after\\u0026#39;]\\n\\n    params[\\u0026#39;after\\u0026#39;] = after\\n    params[\\u0026#39;count\\u0026#39;]= fetch_count\\n    print (\\u0026#39;{} {}\\u0026#39;.format(after,data_length))\\n    print(c)\\n    if after == None  or after == \\u0026#39;None\\u0026#39;:\\n        break\\n    time.sleep(2)\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003Ealso returns 2984 redditors\\u003C/p\\u003E\\n\\n\\u003Cp\\u003Ebut i know that it\\u0026#39;s an incomplete list, when i search for single users through the API i can find users that are not in the list but return true for the API\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E\\u0026gt;\\u0026gt;\\u0026gt; \\u0026#39;po8\\u0026#39; in user_list\\nFalse\\n\\u0026gt;\\u0026gt;\\u0026gt; req = requests.get(url,params={\\u0026#39;user\\u0026#39;:\\u0026#39;po8\\u0026#39;},headers=headers)\\n\\u0026gt;\\u0026gt;\\u0026gt; req.json()\\n{\\u0026#39;kind\\u0026#39;: \\u0026#39;Listing\\u0026#39;, \\u0026#39;data\\u0026#39;: {\\u0026#39;modhash\\u0026#39;: None, \\u0026#39;before\\u0026#39;: None, \\u0026#39;after\\u0026#39;: None, \\u0026#39;children\\u0026#39;: [{\\u0026#39;id\\u0026#39;: \\u0026#39;t2_1w3o\\u0026#39;, \\u0026#39;name\\u0026#39;: \\u0026#39;po8\\u0026#39;, \\u0026#39;date\\u0026#39;: 1417011362.0}]}}\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003Eso either there is something wrong the back end, or there is something wrong with my code and the code in PRAW\\u003C/p\\u003E\\n\\u003C/div\\u003E\\u003C!-- SC_ON --\\u003E\", \"selftext\": \"I have confirmed this with PRAW, toolbox and API requests.\\n\\nwhen  I try to get a full list of all the contributors to /r/armyofscience it does not return in the complete list.\\n\\nexample code:  \\n\\nPRAW: \\n\\n    target_sub = 'armyofscience'\\n    target = r.get_subreddit(target_sub)\\n    target_approved = target.get_contributors(limit=None)\\n\\nreturns 2984 redditors\\n\\nor the API code i just ran:\\n\\n    headers={\\\"User-Agent\\\":\\\"flair finder v1.0 by /u/Doomhammer458\\\",\\\"Authorization\\\":\\\"bearer \\\"+new_mod_access[\\\"access_token\\\"]}\\n    c=0\\n    fetch_count = 0\\n    params = {\\\"limit\\\":1000}\\n    user_list = []\\n    while True:\\n        c+=1\\n        url = \\\"https://oauth.reddit.com/r/armyofscience/about/contributors/\\\"\\n        print(params)\\n        req = requests.get(url,params=params,headers=headers)\\n        data = req.json()[\\\"data\\\"]['children']\\n        for item in data:\\n            user = item['name']\\n            if user not in user_list:\\n                user_list.append(user)\\n            else:\\n                print(\\\"{} is already in the list!\\\".format(user))\\n        data_length = len(data)\\n        fetch_count += data_length\\n        after = req.json()['data']['after']\\n    \\n        params['after'] = after\\n        params['count']= fetch_count\\n        print ('{} {}'.format(after,data_length))\\n        print(c)\\n        if after == None  or after == 'None':\\n            break\\n        time.sleep(2)\\n    \\n    \\n        \\n also returns 2984 redditors\\n\\nbut i know that it's an incomplete list, when i search for single users through the API i can find users that are not in the list but return true for the API\\n\\n    \\u003E\\u003E\\u003E 'po8' in user_list\\n    False\\n    \\u003E\\u003E\\u003E req = requests.get(url,params={'user':'po8'},headers=headers)\\n    \\u003E\\u003E\\u003E req.json()\\n    {'kind': 'Listing', 'data': {'modhash': None, 'before': None, 'after': None, 'children': [{'id': 't2_1w3o', 'name': 'po8', 'date': 1417011362.0}]}}\\n \\n\\nso either there is something wrong the back end, or there is something wrong with my code and the code in PRAW\\n\\n\", \"likes\": null, \"suggested_sort\": null, \"user_reports\": [], \"secure_media\": null, \"link_flair_text\": \"new\", \"id\": \"3qc02b\", \"from_kind\": null, \"gilded\": 0, \"archived\": true, \"clicked\": false, \"report_reasons\": null, \"author\": \"Doomhammer458\", \"media\": null, \"score\": 2, \"approved_by\": null, \"over_18\": false, \"hidden\": false, \"num_comments\": 2, \"thumbnail\": \"\", \"subreddit_id\": \"t5_2h84o\", \"hide_score\": false, \"edited\": false, \"link_flair_css_class\": \"new\", \"author_flair_css_class\": null, \"downs\": 0, \"secure_media_embed\": {}, \"saved\": false, \"removal_reason\": null, \"stickied\": false, \"from\": null, \"is_self\": true, \"from_id\": null, \"permalink\": \"/r/bugs/comments/3qc02b/pagination_of_subreddit_contributor_list_does_not/?ref=search_posts\", \"locked\": false, \"name\": \"t3_3qc02b\", \"created\": 1445923238.0, \"url\": \"https://www.reddit.com/r/bugs/comments/3qc02b/pagination_of_subreddit_contributor_list_does_not/\", \"author_flair_text\": null, \"quarantine\": false, \"title\": \"Pagination of subreddit contributor list does not return a complete list of users.\", \"created_utc\": 1445894438.0, \"distinguished\": null, \"mod_reports\": [], \"visited\": false, \"num_reports\": null, \"ups\": 2}}, {\"kind\": \"t3\", \"data\": {\"domain\": \"self.p18s\", \"banned_by\": null, \"media_embed\": {}, \"subreddit\": \"p18s\", \"selftext_html\": \"\\u003C!-- SC_OFF --\\u003E\\u003Cdiv class=\\\"md\\\"\\u003E\\u003Ch2\\u003Etl;dr\\u003C/h2\\u003E\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003E\\u003Ca href=\\\"https://github.com/reddit/reddit/compare/b71d8b...20759d\\\"\\u003Ehttps://github.com/reddit/reddit/compare/b71d8b...20759d\\u003C/a\\u003E\\u003C/li\\u003E\\n\\u003Cli\\u003E\\u003Ca href=\\\"https://www.reddit.com/r/changelog/comments/yneqk/reddit_change_users_online_text_adjusted_value/\\\"\\u003E[reddit change] \\u0026#39;Users online\\u0026#39; text adjusted; value fuzzed for low values; added to JSON API : changelog\\u003C/a\\u003E\\u003C/li\\u003E\\n\\u003Cli\\u003E\\u003Ca href=\\\"https://www.reddit.com/r/changelog/comments/yek4r/reddit_change_display_the_number_of_users/\\\"\\u003E[reddit change] Display the number of users actively interacting with a subreddit : changelog\\u003C/a\\u003E\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\n\\n\\u003Ch2\\u003E\\u8abf\\u67fb\\u958b\\u59cb\\u003C/h2\\u003E\\n\\n\\u003Cp\\u003E\\u307e\\u305a\\u3001\\u30d6\\u30e9\\u30a6\\u30b6\\u306e\\u003Ca href=\\\"https://developer.mozilla.org/ja/docs/Tools/Page_Inspector\\\"\\u003E\\u30a4\\u30f3\\u30b9\\u30da\\u30af\\u30bf\\u003C/a\\u003E\\u3067\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u3092\\u8868\\u793a\\u3057\\u3066\\u3044\\u308b\\u7b87\\u6240\\u306e HTML \\u3092\\u8abf\\u3079\\u307e\\u3059\\uff1a\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E\\u0026lt;div class=\\u0026quot;titlebox\\u0026quot;\\u0026gt;\\n  \\u0026lt;h1 class=\\u0026quot;hover redditname\\u0026quot;\\u0026gt;\\n    ...\\n    \\u0026lt;span class=\\u0026quot;subscribers\\u0026quot;\\u0026gt;\\n      \\u0026lt;span class=\\u0026quot;number\\u0026quot;\\u0026gt;9,005,418\\u0026lt;/span\\u0026gt;\\n      \\u0026lt;span class=\\u0026quot;word\\u0026quot;\\u0026gt;readers\\u0026lt;/span\\u0026gt;\\n    \\u0026lt;/span\\u0026gt;\\n    \\u0026lt;p class=\\u0026quot;users-online \\u0026quot;\\n       title=\\u0026quot;logged-in users viewing this subreddit in the past 15 minutes\\u0026quot;\\u0026gt;\\n      \\u0026lt;span class=\\u0026quot;number\\u0026quot;\\u0026gt;2,406\\u0026lt;/span\\u0026gt;\\n      \\u0026lt;span class=\\u0026quot;word\\u0026quot;\\u0026gt;users here now\\u0026lt;/span\\u0026gt;\\u0026lt;/p\\u0026gt;\\n      ...\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003E\\u7279\\u5fb4\\u7684\\u306a\\u5358\\u8a9e\\u3067\\u3042\\u308b users-online \\u3067 reddit \\u306e\\u30bd\\u30fc\\u30b9\\u30b3\\u30fc\\u30c9\\u3092\\u691c\\u7d22\\u3059\\u308b\\u3068\\u3001r2/public/css/reddit.less, templates/subredditinfobar.html \\u3067\\u4f7f\\u308f\\u308c\\u3066\\u308b\\u306e\\u304c\\u308f\\u304b\\u308a\\u307e\\u3059\\u3002\\u003Ca href=\\\"http://www.makotemplates.org/\\\"\\u003EMako\\u003C/a\\u003E \\u3067\\u66f8\\u304b\\u308c\\u305f HTML \\u30c6\\u30f3\\u30d7\\u30ec\\u30fc\\u30c8\\u3067\\u3042\\u308b\\u5f8c\\u8005\\u306b\\u3064\\u3044\\u3066\\u898b\\u3066\\u3044\\u304d\\u307e\\u3057\\u3087\\u3046\\uff08\\u3061\\u306a\\u307f\\u306b\\u524d\\u8005\\u306f \\u003Ca href=\\\"http://lesscss.org/\\\"\\u003ELess\\u003C/a\\u003E \\u3067\\u66f8\\u304b\\u308c\\u3066\\u304a\\u308a\\u3001\\u5f8c\\u3067 CSS \\u306b\\u5909\\u63db\\u51e6\\u7406\\u3055\\u308c\\u307e\\u3059\\uff09\\uff1a\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E## r2/templates/subredditinfobar.html\\n${SubscribeButton(thing.sr)}\\n\\n## (1)\\n%if not thing.sr.hide_num_users_info:\\n  \\u0026lt;span class=\\u0026quot;subscribers\\u0026quot;\\u0026gt;${unsafe(Score.readers(thing.subscribers))}\\u0026lt;/span\\u0026gt;\\n  \\u0026lt;p class=\\u0026quot;users-online ${\\u0026#39;fuzzed\\u0026#39; if thing.accounts_active_fuzzed else \\u0026#39;\\u0026#39;}\\u0026quot;\\n     title=\\u0026quot;${_(\\u0026#39;logged-in users viewing this subreddit in the past 15 minutes\\u0026#39;)}\\u0026quot;\\u0026gt;\\n     ${unsafe(Score.users_here_now(thing.accounts_active,\\n         prepend=\\u0026#39;~\\u0026#39; if thing.accounts_active_fuzzed else \\u0026#39;\\u0026#39;))}\\n  \\u0026lt;/p\\u0026gt;\\n%endif\\n\\n## (2)\\n%if feature.is_enabled(\\u0026quot;activity_service_view\\u0026quot;) and\\n    getattr(thing, \\u0026quot;visitor_count\\u0026quot;, None):\\n\\u0026lt;p class=\\u0026quot;users-online ${\\u0026#39;fuzzed\\u0026#39; if thing.visitor_count_is_fuzzed else \\u0026#39;\\u0026#39;}\\u0026quot;\\n   title=\\u0026quot;${_(\\u0026#39;logged-in users viewing this subreddit in the past 15 minutes\\u0026#39;)}\\u0026quot;\\u0026gt;\\n   ${unsafe(Score.users_here_now(thing.visitor_count,\\n       prepend=\\u0026#39;~\\u0026#39; if thing.visitor_count_is_fuzzed else \\u0026#39;\\u0026#39;))}\\n\\u0026lt;/p\\u0026gt;\\n%endif\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003E\\u4f3c\\u305f\\u3088\\u3046\\u306a (1) \\u3068 (2) \\u306e\\u3046\\u3061\\u3001\\u30e6\\u30fc\\u30b6\\u304c\\u901a\\u5e38\\u76ee\\u306b\\u3059\\u308b\\u306e\\u306f (1) \\u306e\\u65b9\\u3067\\u3059\\uff08\\u003Ccode\\u003E\\u0026lt;span class=\\u0026quot;subscribers\\u0026quot;\\u0026gt;...\\u0026lt;/span\\u0026gt;\\u003C/code\\u003E \\u306e\\u6709\\u7121\\u3067\\u5224\\u5225\\u304c\\u3064\\u304d\\u307e\\u3059\\uff09\\u3002(2) \\u306f\\u003Ca href=\\\"https://github.com/reddit/reddit/commit/c88036cdaf8367421f1532163a1e919c93a8489b#diff-deac0950e3b444d3903780f9fc5d73caR64\\\"\\u003E\\u6700\\u8fd1\\uff08\\u53bb\\u5e74\\u306e 12 \\u6708\\uff09\\u30b3\\u30df\\u30c3\\u30c8\\u3055\\u308c\\u305f\\u003C/a\\u003E\\u30b3\\u30fc\\u30c9\\u306e\\u3088\\u3046\\u3067\\u3059\\u3002\\u003C/p\\u003E\\n\\n\\u003Cp\\u003E\\u305d\\u308c\\u3067\\u306f (1) \\u306b\\u3064\\u3044\\u3066\\u8a73\\u3057\\u304f\\u898b\\u3066\\u3044\\u304d\\u307e\\u3057\\u3087\\u3046\\u3002\\u518d\\u63b2\\u3057\\u307e\\u3059\\uff1a\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E## (1)\\n%if not thing.sr.hide_num_users_info:\\n  \\u0026lt;span class=\\u0026quot;subscribers\\u0026quot;\\u0026gt;${unsafe(Score.readers(thing.subscribers))}\\u0026lt;/span\\u0026gt;\\n  \\u0026lt;p class=\\u0026quot;users-online ${\\u0026#39;fuzzed\\u0026#39; if thing.accounts_active_fuzzed else \\u0026#39;\\u0026#39;}\\u0026quot;\\n     title=\\u0026quot;${_(\\u0026#39;logged-in users viewing this subreddit in the past 15 minutes\\u0026#39;)}\\u0026quot;\\u0026gt;\\n     ${unsafe(Score.users_here_now(thing.accounts_active,\\n         prepend=\\u0026#39;~\\u0026#39; if thing.accounts_active_fuzzed else \\u0026#39;\\u0026#39;))}\\n  \\u0026lt;/p\\u0026gt;\\n%endif\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003E\\u003Ccode\\u003Enot thing.sr.hide_num_users_info\\u003C/code\\u003E \\u304c\\u507d\\u306b\\u306a\\u308b\\u306e\\u306f\\u003Ca href=\\\"https://github.com/reddit/reddit/commit/fae672ea8ef4cdb862e4458dea114775f9775813#diff-b30ccce2e7c1e5715267c9bb69830c74R593\\\"\\u003E\\u9694\\u96e2\\uff08quarantine\\uff09\\u3055\\u308c\\u305f\\u30b5\\u30d6\\u30ec\\u306b\\u304a\\u3044\\u3066\\u003C/a\\u003E\\u3067\\u3042\\u308a\\u4f8b\\u5916\\u7684\\u3067\\u3059\\u3002\\u6b21\\u306b Score.readers() \\u3068 \\u003Ccode\\u003EScore.users_here_now()\\u003C/code\\u003E \\u3067\\u3059\\u304c\\u3001\\u3053\\u308c\\u3089\\u306f\\u305d\\u308c\\u305e\\u308c\\u5358\\u6570/\\u8907\\u6570\\u5f62\\u306b\\u3064\\u3044\\u3066\\u51e6\\u7406\\u3057\\u305f\\u308a\\u3001span \\u30bf\\u30b0\\u3067\\u30e9\\u30c3\\u30d7\\u3057\\u305f\\u6587\\u5b57\\u5217\\u3092\\u8fd4\\u3059\\u30e6\\u30fc\\u30c6\\u30a3\\u30ea\\u30c6\\u30a3\\u30af\\u30e9\\u30b9\\u3067\\u3059\\uff08r2/lib/strings.py \\u53c2\\u7167\\uff09\\u3002\\u3088\\u3063\\u3066\\u91cd\\u8981\\u306a\\u306e\\u306f\\u8cfc\\u8aad\\u8005\\u6570 thing.subscribers \\u3068\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570 thing.accounts_active \\u306e\\u65b9\\u3067\\u3059\\u304c\\u3001\\u003Ccode\\u003EScore.users_here_now()\\u003C/code\\u003E \\u306b\\u3088\\u308a\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u304c fuzz\\uff08\\u66d6\\u6627\\u5316\\uff09\\u3055\\u308c\\u3066\\u3044\\u308b\\u5834\\u5408\\u306b\\u306f\\u300c~\\u300d\\u304c\\u524d\\u7f6e\\u3055\\u308c\\u308b\\u3053\\u3068\\u306f\\u899a\\u3048\\u3066\\u304a\\u304f\\u3068\\u3088\\u3044\\u3067\\u3059\\u3002\\u003C/p\\u003E\\n\\n\\u003Cp\\u003E\\u305d\\u308c\\u3067\\u306f\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570 \\u003Ccode\\u003Ething.accounts_active\\u003C/code\\u003E \\u3068\\u3001\\u305d\\u306e\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u304c fuzz \\u3055\\u308c\\u3066\\u3044\\u308b\\u304b\\u3092\\u793a\\u3059\\u30d5\\u30e9\\u30b0 \\u003Ccode\\u003Ething.accounts_active_fuzzed\\u003C/code\\u003E \\u306b\\u3064\\u3044\\u3066\\u898b\\u3066\\u3044\\u304d\\u307e\\u3059\\u3002thing \\u306f SubredditInfoBar \\u30a4\\u30f3\\u30b9\\u30bf\\u30f3\\u30b9\\uff08r2/lib/pages/pages.py \\u53c2\\u7167\\uff09\\u3067\\u3001\\u003Ccode\\u003ESubredditInfoBar__init__()\\u003C/code\\u003E \\u306b\\u306f\\u6b21\\u306e\\u4e00\\u884c\\u304c\\u3042\\u308a\\u307e\\u3059\\uff1a\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003Eself.accounts_active, self.accounts_active_fuzzed = self.sr.get_accounts_active()\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003E\\u3055\\u3063\\u305d\\u304f \\u003Ccode\\u003Eget_accounts_active()\\u003C/code\\u003E \\u306e\\u5b9a\\u7fa9\\u3092\\u898b\\u3066\\u307f\\u307e\\u3057\\u3087\\u3046\\uff08\\u3061\\u306a\\u307f\\u306b sr \\u306f subreddit \\u306e\\u7565\\u3067\\u3059\\uff09\\uff1a\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E# r2/models/subreddit.py\\ndef get_accounts_active(self):\\n    fuzzed = False\\n    count = AccountsActiveBySR.get_count(self)\\n    key = \\u0026#39;get_accounts_active-\\u0026#39; + self._id36\\n\\n    # Fuzz counts having low values, for privacy reasons\\n    if count \\u0026lt; 100 and not c.user_is_admin:\\n        fuzzed = True\\n        cached_count = g.cache.get(key)\\n        if not cached_count:\\n            count = fuzz_activity(count)\\n            g.cache.set(key, count, time=5*60)\\n        else:\\n            count = cached_count\\n    return count, fuzzed\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003E\\u307e\\u305a\\u3001fuzz \\u3055\\u308c\\u308b\\u524d\\u306e\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u306e\\u5024\\u3092 \\u003Ccode\\u003EAccountsActiveBySR.get_count()\\u003C/code\\u003E \\u3067\\u5f97\\u307e\\u3059\\u3002\\u5024\\u304c 100 \\u672a\\u6e80\\u3067\\u3042\\u308b\\u5834\\u5408\\u306f \\u003Ccode\\u003Efuzz_activity()\\u003C/code\\u003E \\u3067 fuzz \\u3057\\u307e\\u3059\\u3002fuzz \\u3057\\u305f\\u5024\\u306f g.cache \\u306b 5 \\u5206\\u9593\\u30ad\\u30e3\\u30c3\\u30b7\\u30e5\\u3057\\u3066\\u304a\\u304d\\u307e\\u3059\\uff08\\u3044\\u305a\\u308c g.cache \\u306a\\u3069\\u306e\\u30ad\\u30e3\\u30c3\\u30b7\\u30e5\\u5468\\u308a\\uff08r2/config/app_globals.py, r2/lib/cache.py\\uff09\\u306b\\u3064\\u3044\\u3066\\u3082\\u8a73\\u3057\\u304f\\u8abf\\u3079\\u3066\\u307f\\u305f\\u3044\\u3068\\u3053\\u308d\\u3067\\u3059\\uff09\\u3002\\u003C/p\\u003E\\n\\n\\u003Cp\\u003E\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u3092\\u66d6\\u6627\\u5316\\u3059\\u308b \\u003Ccode\\u003Efuzz_activity()\\u003C/code\\u003E \\u306b\\u3064\\u3044\\u3066\\u898b\\u3066\\u304a\\u304d\\u307e\\u3057\\u3087\\u3046\\uff1a\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E# r2/lib/utils/utils.py\\ndef fuzz_activity(count):\\n    \\u0026quot;\\u0026quot;\\u0026quot;Add some jitter to an activity metric to maintain privacy.\\u0026quot;\\u0026quot;\\u0026quot;\\n    # decay constant is e**(-x / 60)\\n    decay = math.exp(float(-count) / 60)\\n    jitter = round(5 * decay)\\n    return count + random.randint(0, jitter)\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003Ecount \\u3092\\u4e0e\\u3048\\u305f\\u5834\\u5408\\u306e jitter \\u3068 \\u003Ccode\\u003Efuzz_activity(count)\\u003C/code\\u003E \\u306e\\u5024\\u306f\\u6b21\\u306e\\u3088\\u3046\\u306b\\u306a\\u308a\\u307e\\u3059\\u3002\\u4f8b\\u3048\\u3070\\u3001count \\u304c 0 \\u306a\\u3089 jitter \\u306f 5.0 \\u3067\\u3001\\u003Ccode\\u003Efuzz_activity(count)\\u003C/code\\u003E \\u306e\\u5024\\u306f 0 \\u4ee5\\u4e0a 5 \\u4ee5\\u4e0b\\u3067\\u3059\\u3002\\u003C/p\\u003E\\n\\n\\u003Ctable\\u003E\\u003Cthead\\u003E\\n\\u003Ctr\\u003E\\n\\u003Cth\\u003Ecount\\u003C/th\\u003E\\n\\u003Cth\\u003Ejitter\\u003C/th\\u003E\\n\\u003Cth\\u003Ef(count)\\u003C/th\\u003E\\n\\u003C/tr\\u003E\\n\\u003C/thead\\u003E\\u003Ctbody\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E0\\u003C/td\\u003E\\n\\u003Ctd\\u003E5.0\\u003C/td\\u003E\\n\\u003Ctd\\u003E[0..5]\\u003C/td\\u003E\\n\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E10\\u003C/td\\u003E\\n\\u003Ctd\\u003E4.0\\u003C/td\\u003E\\n\\u003Ctd\\u003E[10..14]\\u003C/td\\u003E\\n\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E20\\u003C/td\\u003E\\n\\u003Ctd\\u003E4.0\\u003C/td\\u003E\\n\\u003Ctd\\u003E[20..24]\\u003C/td\\u003E\\n\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E30\\u003C/td\\u003E\\n\\u003Ctd\\u003E3.0\\u003C/td\\u003E\\n\\u003Ctd\\u003E[30..33]\\u003C/td\\u003E\\n\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E40\\u003C/td\\u003E\\n\\u003Ctd\\u003E3.0\\u003C/td\\u003E\\n\\u003Ctd\\u003E[40..43]\\u003C/td\\u003E\\n\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E50\\u003C/td\\u003E\\n\\u003Ctd\\u003E2.0\\u003C/td\\u003E\\n\\u003Ctd\\u003E[50..52]\\u003C/td\\u003E\\n\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E60\\u003C/td\\u003E\\n\\u003Ctd\\u003E2.0\\u003C/td\\u003E\\n\\u003Ctd\\u003E[60..62]\\u003C/td\\u003E\\n\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E70\\u003C/td\\u003E\\n\\u003Ctd\\u003E2.0\\u003C/td\\u003E\\n\\u003Ctd\\u003E[70..72]\\u003C/td\\u003E\\n\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E80\\u003C/td\\u003E\\n\\u003Ctd\\u003E1.0\\u003C/td\\u003E\\n\\u003Ctd\\u003E[80..81]\\u003C/td\\u003E\\n\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E90\\u003C/td\\u003E\\n\\u003Ctd\\u003E1.0\\u003C/td\\u003E\\n\\u003Ctd\\u003E[90..91]\\u003C/td\\u003E\\n\\u003C/tr\\u003E\\n\\u003C/tbody\\u003E\\u003C/table\\u003E\\n\\n\\u003Cp\\u003E\\u8ab0\\u3082\\u898b\\u3066\\u3044\\u306a\\u3044\\u3088\\u3046\\u306a\\u30b5\\u30d6\\u30ec\\u306a\\u306e\\u306b \\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u304c 5 \\u306b\\u306a\\u3063\\u3066\\u3044\\u305f\\u308a\\u3059\\u308b\\u306e\\u306f\\u3001\\u3053\\u308c\\u304c\\u539f\\u56e0\\u3067\\u3059\\u3002\\u003C/p\\u003E\\n\\n\\u003Cp\\u003E\\u8a71\\u3092\\u623b\\u3057\\u3066 AccountsActiveBySR \\u306b\\u3064\\u3044\\u3066\\u898b\\u3066\\u307f\\u307e\\u3059\\u3002 fuzz \\u3055\\u308c\\u308b\\u524d\\u306e\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u306e\\u5024\\u306f \\u003Ccode\\u003EAccountsActiveBySR.get_count()\\u003C/code\\u003E \\u3067\\u5f97\\u3089\\u308c\\u308b\\u306e\\u3067\\u3057\\u305f\\u3002\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E# r2/models/account.py\\nclass AccountsActiveBySR(tdb_cassandra.View):\\n    _use_db = True\\n    _connection_pool = \\u0026#39;main\\u0026#39;\\n    _ttl = timedelta(minutes=15)\\n\\n    _extra_schema_creation_args = dict(key_validation_class=ASCII_TYPE)\\n\\n    _read_consistency_level  = tdb_cassandra.CL.ONE\\n    _write_consistency_level = tdb_cassandra.CL.ANY\\n\\n    @classmethod\\n    def touch(cls, account, sr):\\n        cls._set_values(sr._id36, {account._id36: \\u0026#39;\\u0026#39;})\\n\\n    @classmethod\\n    def get_count(cls, sr, cached=True):\\n        return cls.get_count_cached(sr._id36, _update=not cached)\\n\\n    @classmethod\\n    @memoize(\\u0026#39;accounts_active\\u0026#39;, time=60)\\n    def get_count_cached(cls, sr_id):\\n        # cls._cf = ColumnFamily(...)\\n        return cls._cf.get_count(sr_id)\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003E\\u3053\\u306e\\u30af\\u30e9\\u30b9\\u306e\\u30d0\\u30c3\\u30af\\u30a8\\u30f3\\u30c9\\u306b\\u306f Cassandra\\u3001Cassandra \\u306e\\u30af\\u30e9\\u30a4\\u30a2\\u30f3\\u30c8\\u306b\\u306f \\u003Ca href=\\\"https://pycassa.github.io/pycassa/tutorial.html\\\"\\u003Epycassa\\u003C/a\\u003E\\u304c\\u4f7f\\u308f\\u308c\\u3066\\u3044\\u307e\\u3059\\u3002 \\u307e\\u305a _cf \\u306f pycassa.ColumnFamily \\u30a4\\u30f3\\u30b9\\u30bf\\u30f3\\u30b9\\u3067\\u3059\\u3002\\u3053\\u306e\\u30a4\\u30f3\\u30b9\\u30bf\\u30f3\\u30b9\\u3092\\u901a\\u3058\\u3066 \\u003Ca href=\\\"https://pycassa.github.io/pycassa/api/pycassa/columnfamily.html#pycassa.columnfamily.ColumnFamily.get_count\\\"\\u003Eget_count()\\u003C/a\\u003E \\u3067\\u884c\\u306e\\u7dcf\\u6570\\u3092\\u5f97\\u305f\\u308a\\u3001touch() \\u3067\\u884c\\u3092\\u8ffd\\u52a0\\u3057\\u305f\\u308a\\u3057\\u3066\\u3044\\u307e\\u3059\\u3002\\u5404\\u884c\\u306f\\u3044\\u308f\\u3070\\u30e6\\u30fc\\u30b6\\u306e\\u300c\\u3053\\u306e\\u30b5\\u30d6\\u30ec\\u3092\\u958b\\u3044\\u305f\\u3088\\u300d\\u3068\\u3044\\u3046\\u7f6e\\u304d\\u66f8\\u304d\\u3067\\u3059\\u3002\\u5404\\u884c\\u306f 15 \\u5206\\u3067\\u6d88\\u3048\\u308b\\u306e\\u3067\\uff08\\u003Ccode\\u003E_ttl = timedelta(minutes=15)\\u003C/code\\u003E\\uff09\\u3001\\u884c\\u306e\\u7dcf\\u6570\\u3092\\u6570\\u3048\\u308c\\u3070\\u904e\\u53bb 15 \\u5206\\u306b\\u7279\\u5b9a\\u306e\\u30b5\\u30d6\\u30ec\\u3092\\u958b\\u3044\\u305f\\u30e6\\u30fc\\u30b6\\u306e\\u7dcf\\u6570\\u304c\\u5f97\\u3089\\u308c\\u307e\\u3059\\u3002\\u3053\\u306e\\u3053\\u3068\\u306f\\u30b5\\u30a4\\u30c9\\u30d0\\u30fc\\u306e\\u95b2\\u89a7\\u6570\\u30e6\\u30fc\\u30b6\\u6570\\u8868\\u793a\\u306b\\u30ab\\u30fc\\u30bd\\u30eb\\u3092\\u5408\\u308f\\u305b\\u305f\\u3068\\u304d\\u306b\\u8868\\u793a\\u3055\\u308c\\u308b\\u30dd\\u30c3\\u30d7\\u30a2\\u30c3\\u30d7 \\u0026quot;logged-in users viewing this subreddit in the past 15 minutes\\u0026quot; \\u3068\\u3082\\u3088\\u304f\\u5408\\u81f4\\u3057\\u307e\\u3059\\u3002\\u003C/p\\u003E\\n\\n\\u003Chr/\\u003E\\n\\n\\u003Cp\\u003E\\u3053\\u3053\\u304b\\u3089\\u306f\\u3001\\u4f8b\\u306e\\u7f6e\\u304d\\u66f8\\u304d\\u3092\\u3044\\u3064\\u3069\\u3053\\u3067\\u30e6\\u30fc\\u30b6\\u304c\\u6b8b\\u3059\\u306e\\u304b\\u306b\\u3064\\u3044\\u3066\\u898b\\u3066\\u3044\\u304d\\u307e\\u3059\\u3002AccountsActiveBySR.touch() \\u306e\\u547c\\u3073\\u51fa\\u3057\\u5143\\u3092\\u9061\\u3063\\u3066\\u3044\\u304f\\u3068\\u3001\\u003Ccode\\u003EOAuth2ResourceController.set_up_user_context()\\u003C/code\\u003E \\u306b\\u884c\\u304d\\u7740\\u304d\\u307e\\u3059\\u3002OAuth2ResourceController \\u306f reddit \\u306e\\u5927\\u62b5\\u306e\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\u304c\\u7d99\\u627f\\u3059\\u308b\\u30af\\u30e9\\u30b9\\u3067\\u3059\\u3002\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E# r2/controllers/reddit_base.py\\ndef set_up_user_context(self):\\n    if not c.user._loaded:\\n        c.user._load()\\n\\n    if c.user.inbox_count \\u0026gt; 0:\\n        c.have_messages = True\\n    c.have_mod_messages = bool(c.user.modmsgtime)\\n\\n    if not isinstance(c.site, FakeSubreddit) and not g.disallow_db_writes:\\n        c.user.update_sr_activity(c.site)\\n\\n    c.user_special_distinguish = c.user.special_distinguish()\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003E\\u6b21\\u306e\\u4e8c\\u884c\\u306b\\u6ce8\\u76ee\\u3057\\u3066\\u304f\\u3060\\u3055\\u3044\\uff1a\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E    if not isinstance(c.site, FakeSubreddit) and not g.disallow_db_writes:\\n        c.user.update_sr_activity(c.site)\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003E\\u003Ccode\\u003Ec.user.update_sr_activity()\\u003C/code\\u003E \\u3092\\u547c\\u3076\\u306e\\u306f c.site \\u304c FakeSubreddit\\uff08\\u3042\\u308b\\u3044\\u306f\\u305d\\u306e\\u30b5\\u30d6\\u30af\\u30e9\\u30b9\\uff09\\u306e\\u30a4\\u30f3\\u30b9\\u30bf\\u30f3\\u30b9\\u3067\\u306a\\u3044\\u5834\\u5408\\u306b\\u9650\\u3089\\u308c\\u307e\\u3059\\u3002FakeSubreddit \\u306b\\u306f MultiReddit\\uff08\\u30de\\u30eb\\u30ec\\uff09\\u3084 DefaultSR\\uff08\\u30d5\\u30ed\\u30f3\\u30c8\\u30da\\u30fc\\u30b8\\uff09\\u306a\\u3069\\u304c\\u542b\\u307e\\u308c\\u307e\\u3059\\u3002\\u4ee5\\u4e0b\\u306b\\u4e3b\\u306a\\u95a2\\u9023\\u30af\\u30e9\\u30b9\\u306e\\u7d99\\u627f\\u95a2\\u4fc2\\u3092\\u6319\\u3052\\u307e\\u3059\\uff08\\u8a73\\u7d30\\u306f r2/models/subreddit.py \\u53c2\\u7167\\uff09\\uff1a\\u003C/p\\u003E\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003EBaseSite\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003ESubreddit\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003ESearchResultSubreddit - \\u003Ca href=\\\"/r/aww/search\\\"\\u003E/r/aww/search\\u003C/a\\u003E?q=praw\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003Cli\\u003EFakeSubreddit\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003EFriendsSR\\u003C/li\\u003E\\n\\u003Cli\\u003EAllSR - \\u003Ca href=\\\"/r/all\\\"\\u003E/r/all\\u003C/a\\u003E\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003EAllMinus\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003EAllFiltered\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003Cli\\u003E_DefaultSR\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003EDefaultSR - \\u003Ca href=\\\"https://www.reddit.com/\\\"\\u003Ehttps://www.reddit.com/\\u003C/a\\u003E\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003Cli\\u003EMultiReddit\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003ELabeledMulti\\u003C/li\\u003E\\n\\u003Cli\\u003EModContribSR\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003EModSR - \\u003Ca href=\\\"/r/mod\\\"\\u003E/r/mod\\u003C/a\\u003E\\u003C/li\\u003E\\n\\u003Cli\\u003EContribSR - \\u003Ca href=\\\"/r/contrib\\\"\\u003E/r/contrib\\u003C/a\\u003E\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003Cli\\u003ERandomReddit - \\u003Ca href=\\\"/r/random\\\"\\u003E/r/random\\u003C/a\\u003E (302 redirect)\\u003C/li\\u003E\\n\\u003Cli\\u003ERandomNSFWReddit - \\u003Ca href=\\\"/r/randnsfw\\\"\\u003E/r/randnsfw\\u003C/a\\u003E (302 redirect)\\u003C/li\\u003E\\n\\u003Cli\\u003ERandomSubscriptionReddit - \\u003Ca href=\\\"/r/myrandom\\\"\\u003E/r/myrandom\\u003C/a\\u003E (302 redirect)\\u003C/li\\u003E\\n\\u003Cli\\u003EDomainSR - /domain/github.com\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\n\\n\\u003Cp\\u003E\\u4ee5\\u4e0a\\u306e\\u968e\\u5c64\\u304b\\u3089\\u3001\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u3068\\u3057\\u3066\\u30ab\\u30a6\\u30f3\\u30c8\\u3055\\u308c\\u308b\\u306e\\u306f\\u30d5\\u30ed\\u30f3\\u30c8\\u30da\\u30fc\\u30b8\\u3084\\u30de\\u30eb\\u30ec\\u3067\\u306f\\u306a\\u3044\\u666e\\u901a\\u306e\\u30b5\\u30d6\\u30ec\\u306e\\u30da\\u30fc\\u30b8\\u3092\\u958b\\u3044\\u3066\\u3044\\u308b\\u3068\\u304d\\u306b\\u9650\\u3089\\u308c\\u308b\\u3068\\u63a8\\u6e2c\\u3067\\u304d\\u307e\\u3059\\u3002\\u30d5\\u30ed\\u30f3\\u30c8\\u30da\\u30fc\\u30b8\\u3084\\u30de\\u30eb\\u30ec\\u304b\\u3089 vote \\u3084 [+] \\u30dc\\u30bf\\u30f3\\u3092\\u62bc\\u3057\\u3066\\u30b3\\u30e1\\u30f3\\u30c8\\u3092\\u5c55\\u958b\\u3057\\u305f\\u5834\\u5408\\u306b\\u3001\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u306b\\u5f71\\u97ff\\u304c\\u3042\\u308b\\u306e\\u304b\\u306a\\u3044\\u306e\\u304b\\u3068\\u3044\\u3063\\u305f\\u554f\\u984c\\u306f\\u6b8b\\u308a\\u307e\\u3059\\u304c\\uff08\\u304a\\u305d\\u3089\\u304f\\u306a\\u3044\\u3068\\u601d\\u3044\\u307e\\u3059\\uff09\\u3001\\u30ad\\u30ea\\u304c\\u306a\\u3044\\u306e\\u3067\\u6df1\\u5165\\u308a\\u3057\\u307e\\u305b\\u3093\\u3002\\u003C/p\\u003E\\n\\n\\u003Cp\\u003Ereddit \\u306b\\u5230\\u7740\\u3057\\u305f\\u30ea\\u30af\\u30a8\\u30b9\\u30c8\\u304c \\u003Ccode\\u003Ec.user.update_sr_activity()\\u003C/code\\u003E \\u306e\\u547c\\u3073\\u51fa\\u3057\\u306b\\u5230\\u9054\\u3059\\u308b\\u307e\\u3067\\u3092\\u3056\\u3063\\u3068\\u8ffd\\u3063\\u3066\\u307f\\u307e\\u3057\\u3087\\u3046\\u3002\\u307e\\u305a\\u3001\\u5230\\u7740\\u3057\\u305f\\u30ea\\u30af\\u30a8\\u30b9\\u30c8\\u306f\\u30df\\u30c9\\u30eb\\u30a6\\u30a7\\u30a2\\u306e\\u5c64\\u3092\\u7d4c\\u7531\\u3057\\u307e\\u3059\\u3002\\u30df\\u30c9\\u30eb\\u30a6\\u30a7\\u30a2\\u306e\\u4e2d\\u3067\\u3082\\u7279\\u306b\\u91cd\\u8981\\u306a\\u306e\\u304c RoutesMiddleware \\u3067\\u3001\\u30ea\\u30af\\u30a8\\u30b9\\u30c8\\u3092\\u3069\\u306e\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\uff08\\u306e\\u30a2\\u30af\\u30b7\\u30e7\\u30f3\\uff09\\u306b\\u5c4a\\u3051\\u308b\\u304b\\u3092\\u6c7a\\u5b9a\\u3057\\u307e\\u3059\\u3002\\u30ea\\u30af\\u30a8\\u30b9\\u30c8\\u3092\\u5c4a\\u3051\\u3089\\u308c\\u305f\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\u306f\\u5148\\u306e\\u6c7a\\u5b9a\\u306b\\u5fdc\\u3058\\u3066\\u30a2\\u30af\\u30b7\\u30e7\\u30f3\\u3092\\u5b9f\\u884c\\u3057\\u307e\\u3059\\u304c\\u3001\\u305d\\u306e\\u524d\\u306b \\u003Ccode\\u003E__before__()\\u003C/code\\u003E \\u3068\\u3044\\u3046\\u30d5\\u30c3\\u30af\\u3092\\u5b9f\\u884c\\u3057\\u307e\\u3059\\u3002\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E# r2/lib/base.py\\nclass BaseController(WSGIController):\\n    def try_pagecache(self):\\n        pass\\n\\n    def __before__(self):\\n        self.fix_cookie_header()\\n        try:\\n            # webob can\\u0026#39;t handle non utf-8 encoded query strings\\n            request.params\\n        except UnicodeDecodeError:\\n            abort(400)\\n\\n        self.pre()\\n        self.try_pagecache()\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003E\\u5404\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\u306f\\u5fc5\\u8981\\u304c\\u3042\\u308c\\u3070 \\u003Ccode\\u003E__before__()\\u003C/code\\u003E \\u5185\\u3067\\u5b9f\\u884c\\u3055\\u308c\\u308b pre() \\u3092\\u5b9a\\u7fa9\\u3057\\u307e\\u3059\\u3002\\u4e3b\\u306a\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\u306e\\u7d99\\u627f\\u95a2\\u4fc2\\u3092\\u898b\\u3066\\u304a\\u304d\\u307e\\u3057\\u3087\\u3046\\uff1a\\u003C/p\\u003E\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003EWSGIController\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003EBaseController\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003EMinimalController\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003EOAuth2AccessController\\u003C/li\\u003E\\n\\u003Cli\\u003EOAuth2ResourceController\\n\\n\\u003Cul\\u003E\\n\\u003Cli\\u003EOAuth2OnlyController\\u003C/li\\u003E\\n\\u003Cli\\u003ERedditController\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\n\\n\\u003Cp\\u003E\\u305d\\u3057\\u3066\\u3001\\u4e0a\\u63b2\\u306e \\u003Ccode\\u003Eset_up_user_context()\\u003C/code\\u003E \\u304c\\u547c\\u3070\\u308c\\u308b\\u306e\\u306f RedditController.pre() \\u304a\\u3088\\u3073 OAuth2OnlyController.pre() \\u306b\\u304a\\u3044\\u3066\\u3067\\u3059\\u3002RedditController \\u306f\\u5927\\u534a\\u306e\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\u304c\\u7d99\\u627f\\u3059\\u308b\\u30af\\u30e9\\u30b9\\u3067\\u3001OAuth2OnlyController \\u306f /api/v1/me \\u306a\\u3069 OAuth2 \\u5c02\\u7528\\u306e API \\u30a8\\u30f3\\u30c9\\u30dd\\u30a4\\u30f3\\u30c8\\u5411\\u3051\\u3067\\u3059\\u3002RedditController.pre() \\u306e\\u5b9a\\u7fa9\\u306e\\u4e00\\u90e8\\u3092\\u898b\\u3066\\u307f\\u307e\\u3057\\u3087\\u3046\\uff1a\\u003C/p\\u003E\\n\\n\\u003Cpre\\u003E\\u003Ccode\\u003E# r2/controllers/reddit_base.py\\ndef pre(self):\\n    ...\\n    MinimalController.pre(self)\\n    ...\\n    if c.user_is_loggedin:\\n        self.set_up_user_context()\\n        c.modhash = generate_modhash()\\n        c.user_is_admin = maybe_admin and c.user.name in g.admins\\n        c.user_is_sponsor = c.user_is_admin or c.user.name in g.sponsors\\n        c.otp_cached = is_otpcookie_valid\\n\\u003C/code\\u003E\\u003C/pre\\u003E\\n\\n\\u003Cp\\u003E\\u30ea\\u30af\\u30a8\\u30b9\\u30c8\\u3057\\u3066\\u304d\\u305f\\u30e6\\u30fc\\u30b6\\u304c\\u30ed\\u30b0\\u30a4\\u30f3\\u6e08\\u307f\\u306a\\u3089\\u3001\\u003Ccode\\u003Eset_up_user_context()\\u003C/code\\u003E \\u3092\\u547c\\u3073\\u307e\\u3059\\u3002\\u30ed\\u30b0\\u30a4\\u30f3\\u3057\\u3066\\u3044\\u306a\\u3044\\u30e6\\u30fc\\u30b6\\u306f\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u3068\\u3057\\u3066\\u30ab\\u30a6\\u30f3\\u30c8\\u3055\\u308c\\u307e\\u305b\\u3093\\u3002\\u003C/p\\u003E\\n\\n\\u003Ch2\\u003E\\u6700\\u5f8c\\u306b\\u003C/h2\\u003E\\n\\n\\u003Cp\\u003Er2/controllers/reddit_base.py \\u306f\\u3068\\u3066\\u3082\\u91cd\\u8981\\u003C/p\\u003E\\n\\u003C/div\\u003E\\u003C!-- SC_ON --\\u003E\", \"selftext\": \"## tl;dr\\n\\n* https://github.com/reddit/reddit/compare/b71d8b...20759d\\n* [[reddit change] 'Users online' text adjusted; value fuzzed for low values; added to JSON API : changelog](https://www.reddit.com/r/changelog/comments/yneqk/reddit_change_users_online_text_adjusted_value/)\\n* [[reddit change] Display the number of users actively interacting with a subreddit : changelog](https://www.reddit.com/r/changelog/comments/yek4r/reddit_change_display_the_number_of_users/)\\n\\n\\n## \\u8abf\\u67fb\\u958b\\u59cb\\n\\n\\u307e\\u305a\\u3001\\u30d6\\u30e9\\u30a6\\u30b6\\u306e[\\u30a4\\u30f3\\u30b9\\u30da\\u30af\\u30bf](https://developer.mozilla.org/ja/docs/Tools/Page_Inspector)\\u3067\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u3092\\u8868\\u793a\\u3057\\u3066\\u3044\\u308b\\u7b87\\u6240\\u306e HTML \\u3092\\u8abf\\u3079\\u307e\\u3059\\uff1a\\n\\n    \\u003Cdiv class=\\\"titlebox\\\"\\u003E\\n      \\u003Ch1 class=\\\"hover redditname\\\"\\u003E\\n        ...\\n        \\u003Cspan class=\\\"subscribers\\\"\\u003E\\n          \\u003Cspan class=\\\"number\\\"\\u003E9,005,418\\u003C/span\\u003E\\n          \\u003Cspan class=\\\"word\\\"\\u003Ereaders\\u003C/span\\u003E\\n        \\u003C/span\\u003E\\n        \\u003Cp class=\\\"users-online \\\"\\n           title=\\\"logged-in users viewing this subreddit in the past 15 minutes\\\"\\u003E\\n          \\u003Cspan class=\\\"number\\\"\\u003E2,406\\u003C/span\\u003E\\n          \\u003Cspan class=\\\"word\\\"\\u003Eusers here now\\u003C/span\\u003E\\u003C/p\\u003E\\n          ...\\n\\n\\u7279\\u5fb4\\u7684\\u306a\\u5358\\u8a9e\\u3067\\u3042\\u308b users-online \\u3067 reddit \\u306e\\u30bd\\u30fc\\u30b9\\u30b3\\u30fc\\u30c9\\u3092\\u691c\\u7d22\\u3059\\u308b\\u3068\\u3001r2/public/css/reddit.less, templates/subredditinfobar.html \\u3067\\u4f7f\\u308f\\u308c\\u3066\\u308b\\u306e\\u304c\\u308f\\u304b\\u308a\\u307e\\u3059\\u3002[Mako](http://www.makotemplates.org/) \\u3067\\u66f8\\u304b\\u308c\\u305f HTML \\u30c6\\u30f3\\u30d7\\u30ec\\u30fc\\u30c8\\u3067\\u3042\\u308b\\u5f8c\\u8005\\u306b\\u3064\\u3044\\u3066\\u898b\\u3066\\u3044\\u304d\\u307e\\u3057\\u3087\\u3046\\uff08\\u3061\\u306a\\u307f\\u306b\\u524d\\u8005\\u306f [Less](http://lesscss.org/) \\u3067\\u66f8\\u304b\\u308c\\u3066\\u304a\\u308a\\u3001\\u5f8c\\u3067 CSS \\u306b\\u5909\\u63db\\u51e6\\u7406\\u3055\\u308c\\u307e\\u3059\\uff09\\uff1a\\n\\n    ## r2/templates/subredditinfobar.html\\n    ${SubscribeButton(thing.sr)}\\n\\n    ## (1)\\n    %if not thing.sr.hide_num_users_info:\\n      \\u003Cspan class=\\\"subscribers\\\"\\u003E${unsafe(Score.readers(thing.subscribers))}\\u003C/span\\u003E\\n      \\u003Cp class=\\\"users-online ${'fuzzed' if thing.accounts_active_fuzzed else ''}\\\"\\n         title=\\\"${_('logged-in users viewing this subreddit in the past 15 minutes')}\\\"\\u003E\\n         ${unsafe(Score.users_here_now(thing.accounts_active,\\n             prepend='~' if thing.accounts_active_fuzzed else ''))}\\n      \\u003C/p\\u003E\\n    %endif\\n    \\n    ## (2)\\n    %if feature.is_enabled(\\\"activity_service_view\\\") and\\n        getattr(thing, \\\"visitor_count\\\", None):\\n    \\u003Cp class=\\\"users-online ${'fuzzed' if thing.visitor_count_is_fuzzed else ''}\\\"\\n       title=\\\"${_('logged-in users viewing this subreddit in the past 15 minutes')}\\\"\\u003E\\n       ${unsafe(Score.users_here_now(thing.visitor_count,\\n           prepend='~' if thing.visitor_count_is_fuzzed else ''))}\\n    \\u003C/p\\u003E\\n    %endif\\n\\n\\u4f3c\\u305f\\u3088\\u3046\\u306a (1) \\u3068 (2) \\u306e\\u3046\\u3061\\u3001\\u30e6\\u30fc\\u30b6\\u304c\\u901a\\u5e38\\u76ee\\u306b\\u3059\\u308b\\u306e\\u306f (1) \\u306e\\u65b9\\u3067\\u3059\\uff08`\\u003Cspan class=\\\"subscribers\\\"\\u003E...\\u003C/span\\u003E` \\u306e\\u6709\\u7121\\u3067\\u5224\\u5225\\u304c\\u3064\\u304d\\u307e\\u3059\\uff09\\u3002(2) \\u306f[\\u6700\\u8fd1\\uff08\\u53bb\\u5e74\\u306e 12 \\u6708\\uff09\\u30b3\\u30df\\u30c3\\u30c8\\u3055\\u308c\\u305f](https://github.com/reddit/reddit/commit/c88036cdaf8367421f1532163a1e919c93a8489b#diff-deac0950e3b444d3903780f9fc5d73caR64)\\u30b3\\u30fc\\u30c9\\u306e\\u3088\\u3046\\u3067\\u3059\\u3002\\n\\n\\u305d\\u308c\\u3067\\u306f (1) \\u306b\\u3064\\u3044\\u3066\\u8a73\\u3057\\u304f\\u898b\\u3066\\u3044\\u304d\\u307e\\u3057\\u3087\\u3046\\u3002\\u518d\\u63b2\\u3057\\u307e\\u3059\\uff1a\\n\\n    ## (1)\\n    %if not thing.sr.hide_num_users_info:\\n      \\u003Cspan class=\\\"subscribers\\\"\\u003E${unsafe(Score.readers(thing.subscribers))}\\u003C/span\\u003E\\n      \\u003Cp class=\\\"users-online ${'fuzzed' if thing.accounts_active_fuzzed else ''}\\\"\\n         title=\\\"${_('logged-in users viewing this subreddit in the past 15 minutes')}\\\"\\u003E\\n         ${unsafe(Score.users_here_now(thing.accounts_active,\\n             prepend='~' if thing.accounts_active_fuzzed else ''))}\\n      \\u003C/p\\u003E\\n    %endif\\n\\n`not thing.sr.hide_num_users_info` \\u304c\\u507d\\u306b\\u306a\\u308b\\u306e\\u306f[\\u9694\\u96e2\\uff08quarantine\\uff09\\u3055\\u308c\\u305f\\u30b5\\u30d6\\u30ec\\u306b\\u304a\\u3044\\u3066](https://github.com/reddit/reddit/commit/fae672ea8ef4cdb862e4458dea114775f9775813#diff-b30ccce2e7c1e5715267c9bb69830c74R593)\\u3067\\u3042\\u308a\\u4f8b\\u5916\\u7684\\u3067\\u3059\\u3002\\u6b21\\u306b Score.readers() \\u3068 `Score.users_here_now()` \\u3067\\u3059\\u304c\\u3001\\u3053\\u308c\\u3089\\u306f\\u305d\\u308c\\u305e\\u308c\\u5358\\u6570/\\u8907\\u6570\\u5f62\\u306b\\u3064\\u3044\\u3066\\u51e6\\u7406\\u3057\\u305f\\u308a\\u3001span \\u30bf\\u30b0\\u3067\\u30e9\\u30c3\\u30d7\\u3057\\u305f\\u6587\\u5b57\\u5217\\u3092\\u8fd4\\u3059\\u30e6\\u30fc\\u30c6\\u30a3\\u30ea\\u30c6\\u30a3\\u30af\\u30e9\\u30b9\\u3067\\u3059\\uff08r2/lib/strings.py \\u53c2\\u7167\\uff09\\u3002\\u3088\\u3063\\u3066\\u91cd\\u8981\\u306a\\u306e\\u306f\\u8cfc\\u8aad\\u8005\\u6570 thing.subscribers \\u3068\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570 thing.accounts_active \\u306e\\u65b9\\u3067\\u3059\\u304c\\u3001`Score.users_here_now()` \\u306b\\u3088\\u308a\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u304c fuzz\\uff08\\u66d6\\u6627\\u5316\\uff09\\u3055\\u308c\\u3066\\u3044\\u308b\\u5834\\u5408\\u306b\\u306f\\u300c~\\u300d\\u304c\\u524d\\u7f6e\\u3055\\u308c\\u308b\\u3053\\u3068\\u306f\\u899a\\u3048\\u3066\\u304a\\u304f\\u3068\\u3088\\u3044\\u3067\\u3059\\u3002\\n\\n\\u305d\\u308c\\u3067\\u306f\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570 `thing.accounts_active` \\u3068\\u3001\\u305d\\u306e\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u304c fuzz \\u3055\\u308c\\u3066\\u3044\\u308b\\u304b\\u3092\\u793a\\u3059\\u30d5\\u30e9\\u30b0 `thing.accounts_active_fuzzed` \\u306b\\u3064\\u3044\\u3066\\u898b\\u3066\\u3044\\u304d\\u307e\\u3059\\u3002thing \\u306f SubredditInfoBar \\u30a4\\u30f3\\u30b9\\u30bf\\u30f3\\u30b9\\uff08r2/lib/pages/pages.py \\u53c2\\u7167\\uff09\\u3067\\u3001`SubredditInfoBar__init__()` \\u306b\\u306f\\u6b21\\u306e\\u4e00\\u884c\\u304c\\u3042\\u308a\\u307e\\u3059\\uff1a\\n\\n    self.accounts_active, self.accounts_active_fuzzed = self.sr.get_accounts_active()\\n\\n\\u3055\\u3063\\u305d\\u304f `get_accounts_active()` \\u306e\\u5b9a\\u7fa9\\u3092\\u898b\\u3066\\u307f\\u307e\\u3057\\u3087\\u3046\\uff08\\u3061\\u306a\\u307f\\u306b sr \\u306f subreddit \\u306e\\u7565\\u3067\\u3059\\uff09\\uff1a\\n\\n    # r2/models/subreddit.py\\n    def get_accounts_active(self):\\n        fuzzed = False\\n        count = AccountsActiveBySR.get_count(self)\\n        key = 'get_accounts_active-' + self._id36\\n\\n        # Fuzz counts having low values, for privacy reasons\\n        if count \\u003C 100 and not c.user_is_admin:\\n            fuzzed = True\\n            cached_count = g.cache.get(key)\\n            if not cached_count:\\n                count = fuzz_activity(count)\\n                g.cache.set(key, count, time=5*60)\\n            else:\\n                count = cached_count\\n        return count, fuzzed\\n\\n\\u307e\\u305a\\u3001fuzz \\u3055\\u308c\\u308b\\u524d\\u306e\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u306e\\u5024\\u3092 `AccountsActiveBySR.get_count()` \\u3067\\u5f97\\u307e\\u3059\\u3002\\u5024\\u304c 100 \\u672a\\u6e80\\u3067\\u3042\\u308b\\u5834\\u5408\\u306f `fuzz_activity()` \\u3067 fuzz \\u3057\\u307e\\u3059\\u3002fuzz \\u3057\\u305f\\u5024\\u306f g.cache \\u306b 5 \\u5206\\u9593\\u30ad\\u30e3\\u30c3\\u30b7\\u30e5\\u3057\\u3066\\u304a\\u304d\\u307e\\u3059\\uff08\\u3044\\u305a\\u308c g.cache \\u306a\\u3069\\u306e\\u30ad\\u30e3\\u30c3\\u30b7\\u30e5\\u5468\\u308a\\uff08r2/config/app_globals.py, r2/lib/cache.py\\uff09\\u306b\\u3064\\u3044\\u3066\\u3082\\u8a73\\u3057\\u304f\\u8abf\\u3079\\u3066\\u307f\\u305f\\u3044\\u3068\\u3053\\u308d\\u3067\\u3059\\uff09\\u3002\\n\\n\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u3092\\u66d6\\u6627\\u5316\\u3059\\u308b `fuzz_activity()` \\u306b\\u3064\\u3044\\u3066\\u898b\\u3066\\u304a\\u304d\\u307e\\u3057\\u3087\\u3046\\uff1a\\n\\n    # r2/lib/utils/utils.py\\n    def fuzz_activity(count):\\n    \\t\\\"\\\"\\\"Add some jitter to an activity metric to maintain privacy.\\\"\\\"\\\"\\n    \\t# decay constant is e**(-x / 60)\\n    \\tdecay = math.exp(float(-count) / 60)\\n    \\tjitter = round(5 * decay)\\n    \\treturn count + random.randint(0, jitter)\\n\\ncount \\u3092\\u4e0e\\u3048\\u305f\\u5834\\u5408\\u306e jitter \\u3068 `fuzz_activity(count)` \\u306e\\u5024\\u306f\\u6b21\\u306e\\u3088\\u3046\\u306b\\u306a\\u308a\\u307e\\u3059\\u3002\\u4f8b\\u3048\\u3070\\u3001count \\u304c 0 \\u306a\\u3089 jitter \\u306f 5.0 \\u3067\\u3001`fuzz_activity(count)` \\u306e\\u5024\\u306f 0 \\u4ee5\\u4e0a 5 \\u4ee5\\u4e0b\\u3067\\u3059\\u3002\\n\\ncount|jitter|f(count)\\n-----|------|-------\\n0  | 5.0 | [0..5]\\n10 | 4.0 | [10..14]\\n20 | 4.0 | [20..24]\\n30 | 3.0 | [30..33]\\n40 | 3.0 | [40..43]\\n50 | 2.0 | [50..52]\\n60 | 2.0 | [60..62]\\n70 | 2.0 | [70..72]\\n80 | 1.0 | [80..81]\\n90 | 1.0 | [90..91]\\n\\n\\u8ab0\\u3082\\u898b\\u3066\\u3044\\u306a\\u3044\\u3088\\u3046\\u306a\\u30b5\\u30d6\\u30ec\\u306a\\u306e\\u306b \\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u304c 5 \\u306b\\u306a\\u3063\\u3066\\u3044\\u305f\\u308a\\u3059\\u308b\\u306e\\u306f\\u3001\\u3053\\u308c\\u304c\\u539f\\u56e0\\u3067\\u3059\\u3002\\n\\n\\u8a71\\u3092\\u623b\\u3057\\u3066 AccountsActiveBySR \\u306b\\u3064\\u3044\\u3066\\u898b\\u3066\\u307f\\u307e\\u3059\\u3002 fuzz \\u3055\\u308c\\u308b\\u524d\\u306e\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u306e\\u5024\\u306f `AccountsActiveBySR.get_count()` \\u3067\\u5f97\\u3089\\u308c\\u308b\\u306e\\u3067\\u3057\\u305f\\u3002\\n\\n    # r2/models/account.py\\n    class AccountsActiveBySR(tdb_cassandra.View):\\n        _use_db = True\\n        _connection_pool = 'main'\\n        _ttl = timedelta(minutes=15)\\n    \\n        _extra_schema_creation_args = dict(key_validation_class=ASCII_TYPE)\\n    \\n        _read_consistency_level  = tdb_cassandra.CL.ONE\\n        _write_consistency_level = tdb_cassandra.CL.ANY\\n    \\n        @classmethod\\n        def touch(cls, account, sr):\\n            cls._set_values(sr._id36, {account._id36: ''})\\n    \\n        @classmethod\\n        def get_count(cls, sr, cached=True):\\n            return cls.get_count_cached(sr._id36, _update=not cached)\\n    \\n        @classmethod\\n        @memoize('accounts_active', time=60)\\n        def get_count_cached(cls, sr_id):\\n            # cls._cf = ColumnFamily(...)\\n            return cls._cf.get_count(sr_id)\\n\\n\\u3053\\u306e\\u30af\\u30e9\\u30b9\\u306e\\u30d0\\u30c3\\u30af\\u30a8\\u30f3\\u30c9\\u306b\\u306f Cassandra\\u3001Cassandra \\u306e\\u30af\\u30e9\\u30a4\\u30a2\\u30f3\\u30c8\\u306b\\u306f [pycassa](https://pycassa.github.io/pycassa/tutorial.html)\\u304c\\u4f7f\\u308f\\u308c\\u3066\\u3044\\u307e\\u3059\\u3002 \\u307e\\u305a _cf \\u306f pycassa.ColumnFamily \\u30a4\\u30f3\\u30b9\\u30bf\\u30f3\\u30b9\\u3067\\u3059\\u3002\\u3053\\u306e\\u30a4\\u30f3\\u30b9\\u30bf\\u30f3\\u30b9\\u3092\\u901a\\u3058\\u3066 [get_count()](https://pycassa.github.io/pycassa/api/pycassa/columnfamily.html#pycassa.columnfamily.ColumnFamily.get_count) \\u3067\\u884c\\u306e\\u7dcf\\u6570\\u3092\\u5f97\\u305f\\u308a\\u3001touch() \\u3067\\u884c\\u3092\\u8ffd\\u52a0\\u3057\\u305f\\u308a\\u3057\\u3066\\u3044\\u307e\\u3059\\u3002\\u5404\\u884c\\u306f\\u3044\\u308f\\u3070\\u30e6\\u30fc\\u30b6\\u306e\\u300c\\u3053\\u306e\\u30b5\\u30d6\\u30ec\\u3092\\u958b\\u3044\\u305f\\u3088\\u300d\\u3068\\u3044\\u3046\\u7f6e\\u304d\\u66f8\\u304d\\u3067\\u3059\\u3002\\u5404\\u884c\\u306f 15 \\u5206\\u3067\\u6d88\\u3048\\u308b\\u306e\\u3067\\uff08`_ttl = timedelta(minutes=15)`\\uff09\\u3001\\u884c\\u306e\\u7dcf\\u6570\\u3092\\u6570\\u3048\\u308c\\u3070\\u904e\\u53bb 15 \\u5206\\u306b\\u7279\\u5b9a\\u306e\\u30b5\\u30d6\\u30ec\\u3092\\u958b\\u3044\\u305f\\u30e6\\u30fc\\u30b6\\u306e\\u7dcf\\u6570\\u304c\\u5f97\\u3089\\u308c\\u307e\\u3059\\u3002\\u3053\\u306e\\u3053\\u3068\\u306f\\u30b5\\u30a4\\u30c9\\u30d0\\u30fc\\u306e\\u95b2\\u89a7\\u6570\\u30e6\\u30fc\\u30b6\\u6570\\u8868\\u793a\\u306b\\u30ab\\u30fc\\u30bd\\u30eb\\u3092\\u5408\\u308f\\u305b\\u305f\\u3068\\u304d\\u306b\\u8868\\u793a\\u3055\\u308c\\u308b\\u30dd\\u30c3\\u30d7\\u30a2\\u30c3\\u30d7 \\\"logged-in users viewing this subreddit in the past 15 minutes\\\" \\u3068\\u3082\\u3088\\u304f\\u5408\\u81f4\\u3057\\u307e\\u3059\\u3002\\n\\n----\\n\\n\\u3053\\u3053\\u304b\\u3089\\u306f\\u3001\\u4f8b\\u306e\\u7f6e\\u304d\\u66f8\\u304d\\u3092\\u3044\\u3064\\u3069\\u3053\\u3067\\u30e6\\u30fc\\u30b6\\u304c\\u6b8b\\u3059\\u306e\\u304b\\u306b\\u3064\\u3044\\u3066\\u898b\\u3066\\u3044\\u304d\\u307e\\u3059\\u3002AccountsActiveBySR.touch() \\u306e\\u547c\\u3073\\u51fa\\u3057\\u5143\\u3092\\u9061\\u3063\\u3066\\u3044\\u304f\\u3068\\u3001`OAuth2ResourceController.set_up_user_context()` \\u306b\\u884c\\u304d\\u7740\\u304d\\u307e\\u3059\\u3002OAuth2ResourceController \\u306f reddit \\u306e\\u5927\\u62b5\\u306e\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\u304c\\u7d99\\u627f\\u3059\\u308b\\u30af\\u30e9\\u30b9\\u3067\\u3059\\u3002\\n\\n    # r2/controllers/reddit_base.py\\n    def set_up_user_context(self):\\n        if not c.user._loaded:\\n            c.user._load()\\n    \\n        if c.user.inbox_count \\u003E 0:\\n            c.have_messages = True\\n        c.have_mod_messages = bool(c.user.modmsgtime)\\n    \\n        if not isinstance(c.site, FakeSubreddit) and not g.disallow_db_writes:\\n            c.user.update_sr_activity(c.site)\\n    \\n        c.user_special_distinguish = c.user.special_distinguish()\\n\\n\\u6b21\\u306e\\u4e8c\\u884c\\u306b\\u6ce8\\u76ee\\u3057\\u3066\\u304f\\u3060\\u3055\\u3044\\uff1a\\n\\n        if not isinstance(c.site, FakeSubreddit) and not g.disallow_db_writes:\\n            c.user.update_sr_activity(c.site)\\n\\n`c.user.update_sr_activity()` \\u3092\\u547c\\u3076\\u306e\\u306f c.site \\u304c FakeSubreddit\\uff08\\u3042\\u308b\\u3044\\u306f\\u305d\\u306e\\u30b5\\u30d6\\u30af\\u30e9\\u30b9\\uff09\\u306e\\u30a4\\u30f3\\u30b9\\u30bf\\u30f3\\u30b9\\u3067\\u306a\\u3044\\u5834\\u5408\\u306b\\u9650\\u3089\\u308c\\u307e\\u3059\\u3002FakeSubreddit \\u306b\\u306f MultiReddit\\uff08\\u30de\\u30eb\\u30ec\\uff09\\u3084 DefaultSR\\uff08\\u30d5\\u30ed\\u30f3\\u30c8\\u30da\\u30fc\\u30b8\\uff09\\u306a\\u3069\\u304c\\u542b\\u307e\\u308c\\u307e\\u3059\\u3002\\u4ee5\\u4e0b\\u306b\\u4e3b\\u306a\\u95a2\\u9023\\u30af\\u30e9\\u30b9\\u306e\\u7d99\\u627f\\u95a2\\u4fc2\\u3092\\u6319\\u3052\\u307e\\u3059\\uff08\\u8a73\\u7d30\\u306f r2/models/subreddit.py \\u53c2\\u7167\\uff09\\uff1a\\n\\n* BaseSite\\n    * Subreddit\\n        * SearchResultSubreddit - /r/aww/search?q=praw\\n    * FakeSubreddit\\n        * FriendsSR\\n        * AllSR - /r/all\\n            * AllMinus\\n                * AllFiltered\\n        * _DefaultSR\\n            * DefaultSR - https://www.reddit.com/\\n        * MultiReddit\\n            * LabeledMulti\\n            * ModContribSR\\n                * ModSR - /r/mod\\n                * ContribSR - /r/contrib\\n        * RandomReddit - /r/random (302 redirect)\\n        * RandomNSFWReddit - /r/randnsfw (302 redirect)\\n        * RandomSubscriptionReddit - /r/myrandom (302 redirect)\\n        * DomainSR - /domain/github.com\\n\\n\\u4ee5\\u4e0a\\u306e\\u968e\\u5c64\\u304b\\u3089\\u3001\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u3068\\u3057\\u3066\\u30ab\\u30a6\\u30f3\\u30c8\\u3055\\u308c\\u308b\\u306e\\u306f\\u30d5\\u30ed\\u30f3\\u30c8\\u30da\\u30fc\\u30b8\\u3084\\u30de\\u30eb\\u30ec\\u3067\\u306f\\u306a\\u3044\\u666e\\u901a\\u306e\\u30b5\\u30d6\\u30ec\\u306e\\u30da\\u30fc\\u30b8\\u3092\\u958b\\u3044\\u3066\\u3044\\u308b\\u3068\\u304d\\u306b\\u9650\\u3089\\u308c\\u308b\\u3068\\u63a8\\u6e2c\\u3067\\u304d\\u307e\\u3059\\u3002\\u30d5\\u30ed\\u30f3\\u30c8\\u30da\\u30fc\\u30b8\\u3084\\u30de\\u30eb\\u30ec\\u304b\\u3089 vote \\u3084 [+] \\u30dc\\u30bf\\u30f3\\u3092\\u62bc\\u3057\\u3066\\u30b3\\u30e1\\u30f3\\u30c8\\u3092\\u5c55\\u958b\\u3057\\u305f\\u5834\\u5408\\u306b\\u3001\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u306b\\u5f71\\u97ff\\u304c\\u3042\\u308b\\u306e\\u304b\\u306a\\u3044\\u306e\\u304b\\u3068\\u3044\\u3063\\u305f\\u554f\\u984c\\u306f\\u6b8b\\u308a\\u307e\\u3059\\u304c\\uff08\\u304a\\u305d\\u3089\\u304f\\u306a\\u3044\\u3068\\u601d\\u3044\\u307e\\u3059\\uff09\\u3001\\u30ad\\u30ea\\u304c\\u306a\\u3044\\u306e\\u3067\\u6df1\\u5165\\u308a\\u3057\\u307e\\u305b\\u3093\\u3002\\n\\nreddit \\u306b\\u5230\\u7740\\u3057\\u305f\\u30ea\\u30af\\u30a8\\u30b9\\u30c8\\u304c `c.user.update_sr_activity()` \\u306e\\u547c\\u3073\\u51fa\\u3057\\u306b\\u5230\\u9054\\u3059\\u308b\\u307e\\u3067\\u3092\\u3056\\u3063\\u3068\\u8ffd\\u3063\\u3066\\u307f\\u307e\\u3057\\u3087\\u3046\\u3002\\u307e\\u305a\\u3001\\u5230\\u7740\\u3057\\u305f\\u30ea\\u30af\\u30a8\\u30b9\\u30c8\\u306f\\u30df\\u30c9\\u30eb\\u30a6\\u30a7\\u30a2\\u306e\\u5c64\\u3092\\u7d4c\\u7531\\u3057\\u307e\\u3059\\u3002\\u30df\\u30c9\\u30eb\\u30a6\\u30a7\\u30a2\\u306e\\u4e2d\\u3067\\u3082\\u7279\\u306b\\u91cd\\u8981\\u306a\\u306e\\u304c RoutesMiddleware \\u3067\\u3001\\u30ea\\u30af\\u30a8\\u30b9\\u30c8\\u3092\\u3069\\u306e\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\uff08\\u306e\\u30a2\\u30af\\u30b7\\u30e7\\u30f3\\uff09\\u306b\\u5c4a\\u3051\\u308b\\u304b\\u3092\\u6c7a\\u5b9a\\u3057\\u307e\\u3059\\u3002\\u30ea\\u30af\\u30a8\\u30b9\\u30c8\\u3092\\u5c4a\\u3051\\u3089\\u308c\\u305f\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\u306f\\u5148\\u306e\\u6c7a\\u5b9a\\u306b\\u5fdc\\u3058\\u3066\\u30a2\\u30af\\u30b7\\u30e7\\u30f3\\u3092\\u5b9f\\u884c\\u3057\\u307e\\u3059\\u304c\\u3001\\u305d\\u306e\\u524d\\u306b `__before__()` \\u3068\\u3044\\u3046\\u30d5\\u30c3\\u30af\\u3092\\u5b9f\\u884c\\u3057\\u307e\\u3059\\u3002\\n\\n    # r2/lib/base.py\\n    class BaseController(WSGIController):\\n        def try_pagecache(self):\\n            pass\\n    \\n        def __before__(self):\\n            self.fix_cookie_header()\\n            try:\\n                # webob can't handle non utf-8 encoded query strings\\n                request.params\\n            except UnicodeDecodeError:\\n                abort(400)\\n    \\n            self.pre()\\n            self.try_pagecache()\\n\\n\\u5404\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\u306f\\u5fc5\\u8981\\u304c\\u3042\\u308c\\u3070 `__before__()` \\u5185\\u3067\\u5b9f\\u884c\\u3055\\u308c\\u308b pre() \\u3092\\u5b9a\\u7fa9\\u3057\\u307e\\u3059\\u3002\\u4e3b\\u306a\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\u306e\\u7d99\\u627f\\u95a2\\u4fc2\\u3092\\u898b\\u3066\\u304a\\u304d\\u307e\\u3057\\u3087\\u3046\\uff1a\\n\\n* WSGIController\\n    * BaseController\\n        * MinimalController\\n           * OAuth2AccessController\\n           * OAuth2ResourceController\\n                * OAuth2OnlyController\\n                * RedditController\\n\\n\\u305d\\u3057\\u3066\\u3001\\u4e0a\\u63b2\\u306e `set_up_user_context()` \\u304c\\u547c\\u3070\\u308c\\u308b\\u306e\\u306f RedditController.pre() \\u304a\\u3088\\u3073 OAuth2OnlyController.pre() \\u306b\\u304a\\u3044\\u3066\\u3067\\u3059\\u3002RedditController \\u306f\\u5927\\u534a\\u306e\\u30b3\\u30f3\\u30c8\\u30ed\\u30fc\\u30e9\\u304c\\u7d99\\u627f\\u3059\\u308b\\u30af\\u30e9\\u30b9\\u3067\\u3001OAuth2OnlyController \\u306f /api/v1/me \\u306a\\u3069 OAuth2 \\u5c02\\u7528\\u306e API \\u30a8\\u30f3\\u30c9\\u30dd\\u30a4\\u30f3\\u30c8\\u5411\\u3051\\u3067\\u3059\\u3002RedditController.pre() \\u306e\\u5b9a\\u7fa9\\u306e\\u4e00\\u90e8\\u3092\\u898b\\u3066\\u307f\\u307e\\u3057\\u3087\\u3046\\uff1a\\n\\n    # r2/controllers/reddit_base.py\\n    def pre(self):\\n        ...\\n        MinimalController.pre(self)\\n        ...\\n        if c.user_is_loggedin:\\n            self.set_up_user_context()\\n            c.modhash = generate_modhash()\\n            c.user_is_admin = maybe_admin and c.user.name in g.admins\\n            c.user_is_sponsor = c.user_is_admin or c.user.name in g.sponsors\\n            c.otp_cached = is_otpcookie_valid\\n\\n\\u30ea\\u30af\\u30a8\\u30b9\\u30c8\\u3057\\u3066\\u304d\\u305f\\u30e6\\u30fc\\u30b6\\u304c\\u30ed\\u30b0\\u30a4\\u30f3\\u6e08\\u307f\\u306a\\u3089\\u3001`set_up_user_context()` \\u3092\\u547c\\u3073\\u307e\\u3059\\u3002\\u30ed\\u30b0\\u30a4\\u30f3\\u3057\\u3066\\u3044\\u306a\\u3044\\u30e6\\u30fc\\u30b6\\u306f\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u3068\\u3057\\u3066\\u30ab\\u30a6\\u30f3\\u30c8\\u3055\\u308c\\u307e\\u305b\\u3093\\u3002\\n\\n\\n## \\u6700\\u5f8c\\u306b\\n\\nr2/controllers/reddit_base.py \\u306f\\u3068\\u3066\\u3082\\u91cd\\u8981\\n\", \"likes\": null, \"suggested_sort\": \"new\", \"user_reports\": [], \"secure_media\": null, \"link_flair_text\": null, \"id\": \"4at068\", \"from_kind\": null, \"gilded\": 0, \"archived\": false, \"clicked\": false, \"report_reasons\": null, \"author\": \"nmtake\", \"media\": null, \"score\": 15, \"approved_by\": null, \"over_18\": false, \"hidden\": false, \"num_comments\": 0, \"thumbnail\": \"\", \"subreddit_id\": \"t5_37vvw\", \"hide_score\": false, \"edited\": 1458221914.0, \"link_flair_css_class\": null, \"author_flair_css_class\": null, \"downs\": 0, \"secure_media_embed\": {}, \"saved\": false, \"removal_reason\": null, \"stickied\": false, \"from\": null, \"is_self\": true, \"from_id\": null, \"permalink\": \"/r/p18s/comments/4at068/\\u305f\\u3073\\u305f\\u3073\\u8a71\\u984c\\u306b\\u306a\\u308b\\u30b5\\u30a4\\u30c9\\u30d0\\u30fc\\u306e\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u306b\\u3064\\u3044\\u3066\\u307e\\u305f\\u8abf\\u3079\\u305f/?ref=search_posts\", \"locked\": false, \"name\": \"t3_4at068\", \"created\": 1458250434.0, \"url\": \"https://www.reddit.com/r/p18s/comments/4at068/\\u305f\\u3073\\u305f\\u3073\\u8a71\\u984c\\u306b\\u306a\\u308b\\u30b5\\u30a4\\u30c9\\u30d0\\u30fc\\u306e\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u306b\\u3064\\u3044\\u3066\\u307e\\u305f\\u8abf\\u3079\\u305f/\", \"author_flair_text\": null, \"quarantine\": false, \"title\": \"\\u305f\\u3073\\u305f\\u3073\\u8a71\\u984c\\u306b\\u306a\\u308b\\u30b5\\u30a4\\u30c9\\u30d0\\u30fc\\u306e\\u95b2\\u89a7\\u4e2d\\u30e6\\u30fc\\u30b6\\u6570\\u306b\\u3064\\u3044\\u3066\\uff08\\u307e\\u305f\\uff09\\u8abf\\u3079\\u305f\", \"created_utc\": 1458221634.0, \"distinguished\": null, \"mod_reports\": [], \"visited\": false, \"num_reports\": null, \"ups\": 15}}], \"after\": null, \"before\": null}}"
        },
        "headers": {
          "CF-RAY": "2c161d52acb22975-DUB",
          "Connection": "keep-alive",
          "Content-Type": "application/json; charset=UTF-8",
          "Date": "Tue, 12 Jul 2016 17:11:28 GMT",
          "Server": "cloudflare-nginx",
          "Strict-Transport-Security": "max-age=15552000; includeSubDomains; preload",
          "Transfer-Encoding": "chunked",
          "Vary": "accept-encoding",
          "X-Moose": "majestic",
          "access-control-allow-origin": "*",
          "access-control-expose-headers": "X-Reddit-Tracking, X-Moose",
          "cache-control": "max-age=0, must-revalidate",
          "x-content-type-options": "nosniff",
          "x-frame-options": "SAMEORIGIN",
          "x-reddit-tracking": "https://pixel.redditmedia.com/pixel/of_destiny.png?v=9g77JNJnpXv7sE%2BqOAVcx56WVbxPZw1giETsPthfy4xHIgzXrCcT1LLBIIpo8SnwWK82ESY7XHc%3D",
          "x-ua-compatible": "IE=edge",
          "x-xss-protection": "1; mode=block"
        },
        "status": {
          "code": 200,
          "message": "OK"
        },
        "url": "https://oauth.reddit.com/r/all/search/?sort=relevance&raw_json=1&syntax=cloudsearch&t=all&restrict_sr=True&limit=1024&q=praw+oauth+search"
      }
    }
  ],
  "recorded_with": "betamax/0.7.1"
}
