2018-12-24 12:54:28 +01:00
|
|
|
# TelegramSwooleClient
|
2019-01-23 12:31:45 +01:00
|
|
|
Fast, simple, async php telegram client and parser:
|
|
|
|
[MadelineProto](https://github.com/danog/MadelineProto) + [Swoole](https://github.com/swoole/swoole-src) Server
|
2019-01-07 13:24:29 +01:00
|
|
|
|
|
|
|
* Online server for tests (previous version, different request syntax): http://tg.i-c-a.su/?format=json&images=0&url=breakingmash
|
|
|
|
* My content aggregator: [https://i-c-a.su](https://i-c-a.su)
|
|
|
|
|
|
|
|
**Features**
|
|
|
|
* Fast async swoole server
|
2019-01-20 18:20:41 +01:00
|
|
|
* Use as micro-service to access telegram api
|
2019-01-07 13:24:29 +01:00
|
|
|
* Get any public telegram posts from groups as json
|
|
|
|
|
|
|
|
**TODO**
|
|
|
|
* RSS output
|
|
|
|
* flood protection (for use in public)
|
|
|
|
* logging
|
|
|
|
|
|
|
|
**Installation**
|
|
|
|
|
|
|
|
1. Get app_id and app_hash at [my.telegram.org](https://my.telegram.org/)
|
|
|
|
1. Swoole extension required: [Install swoole](https://github.com/swoole/swoole-src#%EF%B8%8F-installation)
|
|
|
|
1. Install this package:
|
|
|
|
|
|
|
|
a. Standalone:
|
|
|
|
|
|
|
|
1. download files from github and extract.
|
|
|
|
2. Run `composer install` inside unpacked directory
|
|
|
|
|
|
|
|
b. Existing project:
|
|
|
|
|
|
|
|
1. Add following into your project's composer.json
|
|
|
|
```
|
|
|
|
"repositories": [
|
2019-01-23 12:31:45 +01:00
|
|
|
{
|
|
|
|
"type": "git",
|
|
|
|
"url": "https://github.com/danog/phpseclib"
|
|
|
|
},
|
2019-01-07 13:24:29 +01:00
|
|
|
{
|
|
|
|
"type": "git",
|
|
|
|
"url": "https://github.com/xtrime-ru/TelegramSwooleClient.git"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"require": {
|
|
|
|
"xtrime-ru/telegramswooleclient": "dev-master",
|
2019-01-23 12:31:45 +01:00
|
|
|
"amphp/dns": "dev-master#861cc857b1ba6e02e8a7439c30403682785fce96 as 0.9.9",
|
|
|
|
"amphp/file": "dev-master#5a69fca406ac5fd220de0aa68c887bc8046eb93c as 0.3.3",
|
|
|
|
"amphp/uri": "dev-master#f3195b163275383909ded7770a11d8eb865cbc86 as 0.1.3"
|
2019-01-07 13:24:29 +01:00
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
**Usage**
|
|
|
|
|
|
|
|
1. Install
|
|
|
|
1. Fill options in .env file (see .env.example)
|
|
|
|
1. Run server/parser
|
|
|
|
```
|
|
|
|
php server.php [--help] [-a|--address=127.0.0.1] [-p|--port=9503]
|
|
|
|
|
|
|
|
Options:
|
|
|
|
|
|
|
|
--help Show this message
|
|
|
|
-a --address Server ip (optional) (example: 127.0.0.1 or 0.0.0.0 to listen all hosts)
|
|
|
|
-p --port Server port (optional) (example: 9503)
|
|
|
|
|
|
|
|
Also all options can be set in .env file (see .env.example)
|
|
|
|
```
|
|
|
|
1. Get posts from any open channel
|
|
|
|
|
|
|
|
* Get 10 latests posts from any open channel via GET request:
|
|
|
|
`http://%address%:%port%/json/%channel%`
|
|
|
|
Example:
|
|
|
|
`http://127.0.0.1:9503/json/breakingmash`
|
|
|
|
* Get posts from multiple channels via POST:
|
|
|
|
|
|
|
|
Url: `http://127.0.0.1:9503/json/`
|
|
|
|
|
|
|
|
Headers: `Content-Type: application/json`
|
|
|
|
|
|
|
|
`form-data` and `x-www-form-urlencoded` should work,
|
|
|
|
but was not tested
|
|
|
|
|
|
|
|
Body:
|
|
|
|
```
|
|
|
|
{
|
|
|
|
"getHistory": [
|
|
|
|
{
|
|
|
|
"peer":"channel#1259060275"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"peer": "breakingmash",
|
|
|
|
"limit": 30,
|
|
|
|
"max_id": 200,
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
}
|
|
|
|
```
|
|
|
|
You can use any other options from https://docs.madelineproto.xyz/API_docs/methods/messages_getHistory.html
|
|
|
|
peer name can be provided in different formats: https://docs.madelineproto.xyz/API_docs/types/InputPeer.html
|
2019-01-20 18:20:41 +01:00
|
|
|
1. Access telegram api directly via simple get requests.
|
|
|
|
* Url: `http://%address%:%port%/api/%method%/?%param1%=%val%`
|
|
|
|
* All available methods you can find in `src/Client.php`.
|
|
|
|
* <b>Important: All parameters must be passed at strict order!</b>
|
2019-01-20 18:20:41 +01:00
|
|
|
* <b>Important: api available only from ip in whitelist.</b>
|
|
|
|
By default it is: `127.0.0.1`
|
|
|
|
You can add client ip in .env file to `API_CLIENT_WHITELIST` (use json format)
|
2019-01-07 13:24:29 +01:00
|
|
|
|
2019-01-20 18:20:41 +01:00
|
|
|
Examples:
|
2019-01-22 23:03:36 +01:00
|
|
|
* get_info about channel/user: `http://127.0.0.1:9503/api/getInfo/?data[id]=@xtrime`
|
2019-01-22 23:31:21 +01:00
|
|
|
* repost: `http://127.0.0.1:9503/api/forwardMessages/?data[from_peer]=@xtrime&data[to_peer]=@xtrime&data[id]=1234`
|
2019-01-20 18:20:41 +01:00
|
|
|
* get messages from channel/user: `http://127.0.0.1:9503/api/getHistory/?data[peer]=@breakingmash&data[limit]=10`
|
2019-01-22 23:03:36 +01:00
|
|
|
* search: `http://127.0.0.1:9503/api/searchGlobal/?data[q]=Hello%20World&data[limit]=10`
|
2019-01-20 18:20:41 +01:00
|
|
|
* sendMessage: `http://127.0.0.1:9503/api/sendMessage/?data[peer]=@xtrime&data[message]=Hello!`
|
2019-01-07 13:24:29 +01:00
|
|
|
|
|
|
|
**Contacts**
|
|
|
|
|
|
|
|
* Telegram: [@xtrime](tg://resolve?domain=xtrime)
|
|
|
|
* Email: alexander(at)i-c-a.su
|