go-mastodon/README.md

230 lines
6.1 KiB
Markdown
Raw Normal View History

2017-04-13 09:48:45 +02:00
# go-mastodon
2021-11-04 15:05:34 +01:00
[![Build Status](https://github.com/mattn/go-mastodon/workflows/test/badge.svg?branch=master)](https://github.com/mattn/go-mastodon/actions?query=workflow%3Atest)
[![Codecov](https://codecov.io/gh/mattn/go-mastodon/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-mastodon)
[![Go Reference](https://pkg.go.dev/badge/github.com/mattn/go-mastodon.svg)](https://pkg.go.dev/github.com/mattn/go-mastodon)
2017-04-14 10:15:42 +02:00
[![Go Report Card](https://goreportcard.com/badge/github.com/mattn/go-mastodon)](https://goreportcard.com/report/github.com/mattn/go-mastodon)
2017-04-13 09:48:45 +02:00
2021-11-04 15:05:34 +01:00
2017-04-13 09:48:45 +02:00
## Usage
2017-04-27 05:03:11 +02:00
### Application
2017-04-13 09:48:45 +02:00
```go
2017-04-26 18:46:18 +02:00
package main
import (
"context"
"fmt"
2017-04-27 05:03:11 +02:00
"log"
2017-04-26 18:46:18 +02:00
"github.com/mattn/go-mastodon"
2017-04-27 05:03:11 +02:00
)
func main() {
app, err := mastodon.RegisterApp(context.Background(), &mastodon.AppConfig{
Server: "https://mstdn.jp",
ClientName: "client-name",
Scopes: "read write follow",
Website: "https://github.com/mattn/go-mastodon",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("client-id : %s\n", app.ClientID)
fmt.Printf("client-secret: %s\n", app.ClientSecret)
}
```
### Client
```go
package main
import (
"context"
"fmt"
2017-04-26 18:46:18 +02:00
"log"
2017-04-27 05:03:11 +02:00
"github.com/mattn/go-mastodon"
2017-04-26 18:46:18 +02:00
)
func main() {
c := mastodon.NewClient(&mastodon.Config{
Server: "https://mstdn.jp",
ClientID: "client-id",
ClientSecret: "client-secret",
})
err := c.Authenticate(context.Background(), "your-email", "your-password")
if err != nil {
log.Fatal(err)
}
timeline, err := c.GetTimelineHome(context.Background(), nil)
2017-04-26 18:46:18 +02:00
if err != nil {
log.Fatal(err)
}
for i := len(timeline) - 1; i >= 0; i-- {
fmt.Println(timeline[i])
}
2017-04-13 09:48:45 +02:00
}
```
2017-04-27 05:03:11 +02:00
### Client with Token
This option lets the user avoid storing login credentials in the application. Instead, the user's Mastodon server
provides an access token which is used to authenticate. This token can be stored in the application, but should be guarded.
```
package main
import (
"context"
"fmt"
"log"
"net/url"
"github.com/mattn/go-mastodon"
)
func main() {
appConfig := &mastodon.AppConfig{
Server: "https://stranger.social",
ClientName: "client-name",
Scopes: "read write follow",
Website: "https://github.com/mattn/go-mastodon",
RedirectURIs: "urn:ietf:wg:oauth:2.0:oob",
}
app, err := mastodon.RegisterApp(context.Background(), appConfig)
if err != nil {
log.Fatal(err)
}
// Have the user manually get the token and send it back to us
u, err := url.Parse(app.AuthURI)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Open your browser to \n%s\n and copy/paste the given token\n", u)
var token string
fmt.Print("Paste the token here:")
fmt.Scanln(&token)
config := &mastodon.Config{
Server: "https://stranger.social",
ClientID: app.ClientID,
ClientSecret: app.ClientSecret,
AccessToken: token,
}
c := mastodon.NewClient(config)
err = c.AuthenticateToken(context.Background(), token, "urn:ietf:wg:oauth:2.0:oob")
if err != nil {
log.Fatal((err)
}
acct, err := c.GetAccountCurrentUser(context.Background())
if err != nil {
log.Fatal((err)
}
fmt.Printf("Account is %v\n", acct)
}
```
2017-04-14 17:37:27 +02:00
## Status of implementations
* [x] GET /api/v1/accounts/:id
* [x] GET /api/v1/accounts/verify_credentials
2017-04-16 14:01:46 +02:00
* [x] PATCH /api/v1/accounts/update_credentials
2017-04-14 17:37:27 +02:00
* [x] GET /api/v1/accounts/:id/followers
* [x] GET /api/v1/accounts/:id/following
2017-04-16 14:42:54 +02:00
* [x] GET /api/v1/accounts/:id/statuses
2017-04-14 17:37:27 +02:00
* [x] POST /api/v1/accounts/:id/follow
* [x] POST /api/v1/accounts/:id/unfollow
* [x] GET /api/v1/accounts/:id/block
* [x] GET /api/v1/accounts/:id/unblock
* [x] GET /api/v1/accounts/:id/mute
* [x] GET /api/v1/accounts/:id/unmute
2019-04-27 03:27:43 +02:00
* [x] GET /api/v1/accounts/:id/lists
2017-04-14 17:37:27 +02:00
* [x] GET /api/v1/accounts/relationships
* [x] GET /api/v1/accounts/search
2022-08-27 05:39:44 +02:00
* [x] GET /api/v1/apps/verify_credentials
* [x] GET /api/v1/bookmarks
2017-04-14 17:37:27 +02:00
* [x] POST /api/v1/apps
2017-04-15 09:28:18 +02:00
* [x] GET /api/v1/blocks
* [x] GET /api/v1/conversations
* [x] DELETE /api/v1/conversations/:id
* [x] POST /api/v1/conversations/:id/read
2017-04-15 09:28:18 +02:00
* [x] GET /api/v1/favourites
2022-03-12 11:59:12 +01:00
* [x] GET /api/v1/filters
* [x] POST /api/v1/filters
* [x] GET /api/v1/filters/:id
* [x] PUT /api/v1/filters/:id
* [x] DELETE /api/v1/filters/:id
2017-04-15 09:28:18 +02:00
* [x] GET /api/v1/follow_requests
2017-04-16 18:37:29 +02:00
* [x] POST /api/v1/follow_requests/:id/authorize
* [x] POST /api/v1/follow_requests/:id/reject
* [x] GET /api/v1/followed_tags
2017-04-14 17:37:27 +02:00
* [x] POST /api/v1/follows
* [x] GET /api/v1/instance
* [x] GET /api/v1/instance/activity
* [x] GET /api/v1/instance/peers
2019-04-27 03:27:43 +02:00
* [x] GET /api/v1/lists
* [x] GET /api/v1/lists/:id/accounts
* [x] GET /api/v1/lists/:id
* [x] POST /api/v1/lists
* [x] PUT /api/v1/lists/:id
* [x] DELETE /api/v1/lists/:id
* [x] POST /api/v1/lists/:id/accounts
* [x] DELETE /api/v1/lists/:id/accounts
2017-04-17 06:56:35 +02:00
* [x] POST /api/v1/media
2017-04-17 06:00:53 +02:00
* [x] GET /api/v1/mutes
2017-04-14 17:37:27 +02:00
* [x] GET /api/v1/notifications
* [x] GET /api/v1/notifications/:id
* [x] POST /api/v1/notifications/:id/dismiss
2017-04-14 17:37:27 +02:00
* [x] POST /api/v1/notifications/clear
* [x] POST /api/v1/push/subscription
* [x] GET /api/v1/push/subscription
* [x] PUT /api/v1/push/subscription
* [x] DELETE /api/v1/push/subscription
2017-04-16 21:51:16 +02:00
* [x] GET /api/v1/reports
* [x] POST /api/v1/reports
* [x] GET /api/v2/search
2017-04-14 17:37:27 +02:00
* [x] GET /api/v1/statuses/:id
* [x] GET /api/v1/statuses/:id/context
* [x] GET /api/v1/statuses/:id/card
* [x] GET /api/v1/statuses/:id/history
2017-04-16 14:01:46 +02:00
* [x] GET /api/v1/statuses/:id/reblogged_by
* [x] GET /api/v1/statuses/:id/source
2017-04-16 14:01:46 +02:00
* [x] GET /api/v1/statuses/:id/favourited_by
* [x] POST /api/v1/statuses
* [x] PUT /api/v1/statuses/:id
2017-04-15 14:07:11 +02:00
* [x] DELETE /api/v1/statuses/:id
2017-04-16 14:01:46 +02:00
* [x] POST /api/v1/statuses/:id/reblog
* [x] POST /api/v1/statuses/:id/unreblog
* [x] POST /api/v1/statuses/:id/favourite
* [x] POST /api/v1/statuses/:id/unfavourite
* [x] POST /api/v1/statuses/:id/bookmark
* [x] POST /api/v1/statuses/:id/unbookmark
2017-04-14 17:37:27 +02:00
* [x] GET /api/v1/timelines/home
2017-04-15 09:28:18 +02:00
* [x] GET /api/v1/timelines/public
2017-04-15 14:02:55 +02:00
* [x] GET /api/v1/timelines/tag/:hashtag
2019-04-27 03:56:47 +02:00
* [x] GET /api/v1/timelines/list/:id
2021-02-25 15:25:44 +01:00
* [x] GET /api/v1/streaming/user
* [x] GET /api/v1/streaming/public
* [x] GET /api/v1/streaming/hashtag?tag=:hashtag
* [x] GET /api/v1/streaming/hashtag/local?tag=:hashtag
* [x] GET /api/v1/streaming/list?list=:list_id
2021-02-25 15:26:45 +01:00
* [x] GET /api/v1/streaming/direct
2017-04-13 09:48:45 +02:00
## Installation
2022-11-12 13:39:47 +01:00
```shell
go install github.com/mattn/go-mastodon@latest
2017-04-13 09:48:45 +02:00
```
## License
MIT
## Author
Yasuhiro Matsumoto (a.k.a. mattn)