{"id":18558009,"url":"https://github.com/zh/reatiwe","last_synced_at":"2025-10-11T19:08:41.547Z","repository":{"id":697381,"uuid":"342391","full_name":"zh/ReaTiWe","owner":"zh","description":"Your Real Time Web Playground","archived":false,"fork":false,"pushed_at":"2010-03-03T09:11:11.000Z","size":184,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-10T17:01:58.297Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://reatiwe.appspot.com/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zh.png","metadata":{"files":{"readme":"README.markdown","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2009-10-19T15:40:48.000Z","updated_at":"2014-01-08T10:23:34.000Z","dependencies_parsed_at":"2022-07-18T04:30:43.394Z","dependency_job_id":null,"html_url":"https://github.com/zh/ReaTiWe","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zh/ReaTiWe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zh%2FReaTiWe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zh%2FReaTiWe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zh%2FReaTiWe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zh%2FReaTiWe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zh","download_url":"https://codeload.github.com/zh/ReaTiWe/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zh%2FReaTiWe/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279008440,"owners_count":26084459,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T21:38:39.980Z","updated_at":"2025-10-11T19:08:41.506Z","avatar_url":"https://github.com/zh.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## What is ReaTiWe?\n\nReal Time Web (Rea-Ti-We) is your playground for all cool real-time-related stuff,\nwhich become popular recently:\n\n * [XMPP](http://xmpp.org/)\n * [Webhooks](http://webhooks.org/)\n * [PuSH](http://code.google.com/p/pubsubhubbub/)\n * etc.\n\n\nThe system have two main parts:\n\n * Web interface, hosted on Google AppEngine and available on URL: \n   [http://reatiwe.appspot.com/](http://reatiwe.appspot.com/)\n * XMPP bot with JID  __reatiwe@appspot.com__ , hosted also on \n   [Google AppEngine](http://code.google.com/appengine/docs/python/xmpp/overview.html)\n\n## Features\n\n * Microblogging via web or via XMPP (__@me {text}__ command)\n * XMPP messages between ReaTiWe users by nickname (__@nick {text}__ command)\n * Comments on entries via web or via XMPP (__#1234 {text}__ command)\n * A lot of __/callback/{some_secret}__ valid \n  [PuSH subscribers](http://pubsubhubbub.appspot.com/subscribe) - used for external feeds\n  aggregation\n *  __/callback/{username}/atom__ URL is a valid\n  [PuSH topic](http://pubsubhubbub.appspot.com/publish) - used by external aggregators\n  for getting notifications from ReaTiWe\n\n\n## Getting started\n\n### Initial registration\n\nMost of the system services are available only after sign in. For that, you need a Google\naccount. After the sign in, go to the [Settings](/settings) page and fill your details:\n\n * __Nickname__ - Used mostly via XMPP (messages etc.). Will also hide your real JID\n * __Full name__ - Visible via web on all your entries.\n * __JID__ - Add  __reatiwe@appspot.com__ to that account's roster\n * __Secret__ - Used for JID validation (__AUTH__ command)\n * __TwitName__ - Used only for the avatars (service provided by http://img.tweetimag.es/ )\n * __Subscriptions__ - list of topics, you are subscribed to. See below (PuSH section) for details.\n\n### Working with the bot\n\nTest the connection with the bot:\n\n    ping\n\nValidate your JID. If for example your settings are - JID: _user@sample.com_ and secret:\n_secret123_ :\n\n * Add __reatiwe@appspot.com__ to  _user@sample.com_ 's roster and authorize it:\n * Send:\n    \n    AUTH secret123\n\nIf you change your JID, you need to revalidate it.\n\nStart microblogging, comment on entries, sending messages to other users:\n\n    @me This is just a small test microblog message\n    @dude hi, dude. I'm using ReaTiWe too\n    last   (will show everybody's last 10 entries)\n    #3214  (will show you entry with ID=3214)\n    like #3214 (likes this entry)\n    #3214 interesting stuff. this is my comment\n    mine   (will show your own last 10 entries)\n    off (no more messages coming)\n    on  (messages coming again)\n\nYou can disable messages from other users or announces for new feed entries with \n__ON__ / __OFF__ commands\n\n### Atom feeds\n\n\"Public timeline\" Atom feed is on URL \n[http://reatiwe.appspot.com/atom](http://reatiwe.appspot.com/atom).\nThere is also per user Atom feed, available on URL\n__http://reatiwe.appspot.com/user/{username}/atom__\nBoth types of feeds have PuSH reference hub URL included:\n\n    \u003clink rel=\"hub\" href=\"https://pubsubhubbub.appspot.com/\"/\u003e\n\n### Webhooks and PubSubHubbub (PuSH)\n\nEverytime some user is creating a new entry via web or XMPP, the system will ping\n[PubSubHubbub reference hub](http://pubsubhubbub.appspot.com/) with two topics:\n\n * Main Atom feed: __http://reatiwe.appspot.com/atom__\n * Entry author's feed: __http://reatiwe.appspot.com/user/{username}/atom__\n\nIf you want some external services to get real-time notifications from ReaTiWe,\nask them to [subscribe](http://pubsubhubbub.appspot.com/subscribe) to that topics.\nIf the external service is not getting your entries, you can try to ping the hub\nfrom the [PuSH reference hub 'Publish' page](http://pubsubhubbub.appspot.com/publish).\nOn the same page, you can check when was the last time, when the hub got your feed.\n\nIf you want to aggregate some external Atom feeds with your entries, go to the\n[Settings](/settings) page and enter the _topic URL_ and (optional) the _origin_ (some\nstring, you want to see in the _'from ...'_ part of the entries).\nYou can enter also some PuSH hub URL or use the default\n[PuSH reference hub](http://pubsubhubbub.appspot.com/): _\"hub.mode\"=\"subscribe\"_,\n_\"hub.callback\"=\"http://reatiwe.appspot.com/callback/{some_secret}\"_\n\nReaTiWe subscribtion handler is checking for _'hub.challenge'_  and  _'hub.topic'_\nparameters, via a GET request from the PuSH hub, and sending back _'hub.challenge'_ \nin the response body.\n\nOn POST requests, comming from the hub, only the valid Atom entries, which are still\nnew for the system (checking atom entries IDs and links) are aggregated.\n\nYou can also subscribe/unsubscribe from the XMPP bot (commands follows):\n\n    list (show all your subscriptions)\n    sub http://somefeed.example.com/feed SomeFeed http://hub.com/  (origin='SomeFeed', \n                                                                    hub='http://hub.com/')\n    unsub Xx12eW  (unsubscribe from topic with name=Xx12eW)\n  \nThere is also an XMPP messages send webhook (__POST__ requests), available on URL:\n[http://reatiwe.appspot.com/send](http://reatiwe.appspot.com/send). You can use it to\nsend XMPP messages via web (pure-man BOSH service ;) ) to ReaTiWe users. Needed parameters\nare as follows:\n\n * __to__ - username, you want to send a message to\n * __from__ - your username\n * __secret__ - the __secret__ from the [Settings](/settings) page\n * __message__ - message text to send\n\nExample code:\n\n    curl -X POST -d\"to=other\" -d\"from=me\" -d\"secret=secret123\" \\\n                 -d\"message=hello+world\" http://reatiwe.appspot.com/send\n\n## Available XMPP commands\n\nIn order to use the ReaTiWe services via XMPP, you need to add __reatiwe@appspot.com__ JID \nto your roster and eventualy accept the authorization request.\n\n### Commands, available for everybody\n\n * __help, ?__ - available commands\n * __ping__ - check the connection\n * __auth {secret}__ - validate the current JID\n\n### Commands, available only after JID validation\n\nIn order to validate your current nick, you need to enter it on the [Settings](/settings) page.\nOn the same page you can enter your secret too. By default a random secret will be generated, \nwhen you first login to the system. From your XMPP client send\n\n    AUTH {your secret here}\n\n, where {your secret here} is the secret from the [Settings](/settings) page.\n\n * __on / off__ - enable / disable messages from the system\n * __@nick__ - send a message to another system user\n * __@me {text}__ - post an entry\n * __last__ - show last 10 entries from everybody\n * __mine__ - show your own last 10 entries\n * __#1234__ - show some entry and comments to it, 1234 is an entry ID\n * __#1234 {text}__ - comment on some entry, 1234 is an entry ID\n * __like #1234 {text}__ - like an entry with ID=1234\n * __list__ - list all topic subscriptions\n * __sub {url} [alias] [hub]__ - subscribe to some topic (Atom feed) (alias is optional, default=\"feed\")\n * __unsub {name}__ - unsubscribe from some topic\n\n## Use cases\n\n * Simple microblog with web and XMPP input\n * PuSH publisher\n * PuSH subscriber ([supporting also SuperFeedr](http://bloggitation.appspot.com/entry/using-reatiwe-like-a-superfeedr-subscriber))\n * [Web-to-XMPP gateway](http://bloggitation.appspot.com/entry/using-reatiwe-like-a-web-to-xmpp-gateway)\n * [PuSH-to-XMPP gateway](http://bloggitation.appspot.com/entry/using-reatiwe-like-a-push-to-xmpp-gateway)\n * SocNode (TODO, still missing _/friends/{user}_ feed)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzh%2Freatiwe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzh%2Freatiwe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzh%2Freatiwe/lists"}