From e32d9dd52c0f38e32ea038b4e7a2cacc9493dc79 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 20 Apr 2024 11:20:03 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20Add=20more=20tests=20#97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marcus Fihlon --- .../mastodon/DefaultMastodonLoader.java | 41 + .../social/mastodon/MastodonLoader.java | 28 + .../social/mastodon/MastodonPlugin.java | 16 +- .../social/mastodon/MastodonPluginTest.java | 69 +- src/test/resources/mastodon.json | 1075 +++++++++++++++++ 5 files changed, 1213 insertions(+), 16 deletions(-) create mode 100644 src/main/java/swiss/fihlon/apus/plugin/social/mastodon/DefaultMastodonLoader.java create mode 100644 src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonLoader.java create mode 100644 src/test/resources/mastodon.json diff --git a/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/DefaultMastodonLoader.java b/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/DefaultMastodonLoader.java new file mode 100644 index 0000000..9a6b644 --- /dev/null +++ b/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/DefaultMastodonLoader.java @@ -0,0 +1,41 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package swiss.fihlon.apus.plugin.social.mastodon; + +import org.jetbrains.annotations.NotNull; +import org.springframework.stereotype.Service; +import social.bigbone.MastodonClient; +import social.bigbone.api.Range; +import social.bigbone.api.entity.Status; +import social.bigbone.api.exception.BigBoneRequestException; + +import java.util.List; + +import static social.bigbone.api.method.TimelineMethods.StatusOrigin.LOCAL_AND_REMOTE; + +@Service +public final class DefaultMastodonLoader implements MastodonLoader { + + @Override + @NotNull public List getStatuses(@NotNull final String instance, @NotNull final String hashtag) throws BigBoneRequestException { + final MastodonClient client = new MastodonClient.Builder(instance).build(); + final Range range = new Range(null, null, null, 100); + return client.timelines().getTagTimeline(hashtag, LOCAL_AND_REMOTE, range).execute().getPart(); + } + +} diff --git a/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonLoader.java b/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonLoader.java new file mode 100644 index 0000000..b0fd09f --- /dev/null +++ b/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonLoader.java @@ -0,0 +1,28 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package swiss.fihlon.apus.plugin.social.mastodon; + +import org.jetbrains.annotations.NotNull; +import social.bigbone.api.entity.Status; +import social.bigbone.api.exception.BigBoneRequestException; + +import java.util.List; + +public interface MastodonLoader { + @NotNull List getStatuses(@NotNull String instance, @NotNull String hashtag) throws BigBoneRequestException; +} diff --git a/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPlugin.java b/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPlugin.java index c29f505..241c296 100644 --- a/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPlugin.java +++ b/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPlugin.java @@ -21,9 +21,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import social.bigbone.MastodonClient; -import social.bigbone.api.Pageable; -import social.bigbone.api.Range; import social.bigbone.api.entity.Account; import social.bigbone.api.entity.MediaAttachment; import social.bigbone.api.entity.Status; @@ -37,19 +34,20 @@ import java.util.ArrayList; import java.util.List; -import static social.bigbone.api.method.TimelineMethods.StatusOrigin.LOCAL_AND_REMOTE; - @Service public final class MastodonPlugin implements SocialPlugin { private static final Logger LOGGER = LoggerFactory.getLogger(MastodonPlugin.class); + private final MastodonLoader mastodonLoader; private final String instance; private final String hashtag; private final boolean imagesEnabled; private final int imageLimit; - public MastodonPlugin(@NotNull final Configuration configuration) { + public MastodonPlugin(@NotNull final MastodonLoader mastodonLoader, + @NotNull final Configuration configuration) { + this.mastodonLoader = mastodonLoader; final var mastodonConfig = configuration.getMastodon(); this.instance = mastodonConfig.instance(); this.hashtag = mastodonConfig.hashtag(); @@ -66,10 +64,8 @@ public boolean isEnabled() { public List getPosts() { try { LOGGER.info("Starting download of posts with hashtag '{}' from instance '{}'", hashtag, instance); - final MastodonClient client = new MastodonClient.Builder(instance).build(); - final Range range = new Range(null, null, null, 100); - final Pageable statuses = client.timelines().getTagTimeline(hashtag, LOCAL_AND_REMOTE, range).execute(); - final List posts = statuses.getPart().stream() + final List statuses = mastodonLoader.getStatuses(instance, hashtag); + final List posts = statuses.stream() .map(this::convertToPost) .sorted() .toList(); diff --git a/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPluginTest.java b/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPluginTest.java index 41514f6..ac7a5b4 100644 --- a/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPluginTest.java +++ b/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPluginTest.java @@ -17,25 +17,34 @@ */ package swiss.fihlon.apus.plugin.social.mastodon; +import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import social.bigbone.PrecisionDateTime; +import social.bigbone.api.entity.Account; +import social.bigbone.api.entity.MediaAttachment; +import social.bigbone.api.entity.Status; import swiss.fihlon.apus.configuration.Configuration; import swiss.fihlon.apus.social.Post; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.List; import java.util.stream.Stream; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; class MastodonPluginTest { - private static Stream provideDisabledData() { + private static Stream provideDataForDisabledTest() { return Stream.of( Arguments.of("", ""), Arguments.of(" ", " "), @@ -47,7 +56,7 @@ private static Stream provideDisabledData() { } @ParameterizedTest - @MethodSource("provideDisabledData") + @MethodSource("provideDataForDisabledTest") void isDisabled(final String instance, final String hashtag) { final var configuration = mock(Configuration.class); final var mastodonConfig = mock(MastodonConfig.class); @@ -55,7 +64,7 @@ void isDisabled(final String instance, final String hashtag) { when(mastodonConfig.instance()).thenReturn(instance); when(mastodonConfig.hashtag()).thenReturn(hashtag); - final var mastodonPlugin = new MastodonPlugin(configuration); + final var mastodonPlugin = new MastodonPlugin(new TestMastodonLoader(), configuration); assertFalse(mastodonPlugin.isEnabled()); } @@ -67,7 +76,7 @@ void isEnabled() { when(mastodonConfig.instance()).thenReturn("localhost"); when(mastodonConfig.hashtag()).thenReturn("foobar"); - final var mastodonPlugin = new MastodonPlugin(configuration); + final var mastodonPlugin = new MastodonPlugin(new TestMastodonLoader(), configuration); assertTrue(mastodonPlugin.isEnabled()); } @@ -75,11 +84,59 @@ void isEnabled() { void getPosts() { final var configuration = mock(Configuration.class); when(configuration.getMastodon()).thenReturn( - new MastodonConfig("mastodon.social", "java", true, 0)); + new MastodonConfig("localhost", "foobar", true, 0)); - final MastodonPlugin mastodonPlugin = new MastodonPlugin(configuration); + final MastodonPlugin mastodonPlugin = new MastodonPlugin(new TestMastodonLoader(), configuration); final List posts = mastodonPlugin.getPosts(); assertNotNull(posts); + assertEquals(5, posts.size()); + + final var firstPost = posts.getFirst(); + assertEquals("ID 1", firstPost.id()); + assertEquals("Display Name 1", firstPost.author()); + assertEquals("Avatar 1", firstPost.avatar()); + assertEquals("profile1@localhost", firstPost.profile()); + assertEquals(1, firstPost.images().size()); + assertEquals("http://localhost/image1.webp", firstPost.images().getFirst()); + } + + private static final class TestMastodonLoader implements MastodonLoader { + + @Override + @NotNull public List getStatuses(@NotNull String instance, @NotNull String hashtag) { + return List.of( + createStatus(1), + createStatus(2), + createStatus(3), + createStatus(4), + createStatus(5) + ); + } + + private Status createStatus(final int i) { + final Account account = mock(Account.class); + when(account.getDisplayName()).thenReturn("Display Name " + i); + when(account.getAvatar()).thenReturn("Avatar " + i); + when(account.getAcct()).thenReturn("profile" + i); + + final PrecisionDateTime createdAt = mock(PrecisionDateTime.class); + when(createdAt.mostPreciseOrFallback(any())).thenReturn(Instant.now().minus(i, ChronoUnit.MINUTES)); + + final MediaAttachment mediaAttachment = mock(MediaAttachment.class); + when(mediaAttachment.getType()).thenReturn(MediaAttachment.MediaType.IMAGE); + when(mediaAttachment.getUrl()).thenReturn("http://localhost/image" + i + ".webp"); + final List mediaAttachments = List.of(mediaAttachment); + + final Status status = mock(Status.class); + when(status.getId()).thenReturn("ID " + i); + when(status.getAccount()).thenReturn(account); + when(status.getCreatedAt()).thenReturn(createdAt); + when(status.getContent()).thenReturn("Content for post #" + i); + when(status.getMediaAttachments()).thenReturn(mediaAttachments); + when(status.getInReplyToId()).thenReturn(null); + when(status.isSensitive()).thenReturn(false); + return status; + } } } diff --git a/src/test/resources/mastodon.json b/src/test/resources/mastodon.json new file mode 100644 index 0000000..ddd6078 --- /dev/null +++ b/src/test/resources/mastodon.json @@ -0,0 +1,1075 @@ +[ + { + "id": "714859", + "created_at": "2017-04-21T15:00:42.000Z", + "in_reply_to_id": "675923", + "in_reply_to_account_id": "14729", + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "14988", + "username": "jeroenpraat", + "acct": "jeroenpraat@mastodon.social", + "display_name": "jeroenpraat", + "locked": false, + "created_at": "2017-04-20T08:31:19.285Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 19, + "note": "duider / criticus / opiniemaker / activist / 'Gutmensch' / just a victim of society and all its games / more @ https://jeroenpraat.nl", + "url": "https://mastodon.social/@jeroenpraat", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/014/988/original/96e47bbfc3b32be0.png?1492677079", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/014/988/original/96e47bbfc3b32be0.png?1492677079", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/014/988/original/99c112406d5f0d49.JPG?1492677081", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/014/988/original/99c112406d5f0d49.JPG?1492677081", + "nico_url": null + }, + "media_attachments": [], + "mentions": [ + { + "url": "https://mstdn.io/@alexl", + "acct": "alexl@mstdn.io", + "id": "14729", + "username": "alexl" + }, + { + "url": "https://social.nasqueron.org/@deadsuperhero", + "acct": "deadsuperhero@social.nasqueron.org", + "id": "11389", + "username": "deadsuperhero" + } + ], + "tags": [ + { + "name": "diaspora", + "url": "https://friends.nico/tags/diaspora" + }, + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:mastodon.social,2017-04-21:objectId=3610569:objectType=Status", + "content": "

@alexl @deadsuperhero Yes, but not only #Mastodon should be compatible with the Diaspora protocol, but #Diaspora should also be compatible with the Mastodon/oStatus protocol. That's not only fair, but also gives a lot more stability. A shared federation library would eventually be the best thing. But hé, I'm not a coder ;-)

", + "url": "https://mastodon.social/users/jeroenpraat/updates/2014093", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "712356", + "created_at": "2017-04-21T14:56:07.000Z", + "in_reply_to_id": "707780", + "in_reply_to_account_id": "12677", + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "19315", + "username": "jbbdude", + "acct": "jbbdude@mastodon.bigdinosaur.org", + "display_name": "JBBdude", + "locked": false, + "created_at": "2017-04-20T15:57:58.784Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 82, + "note": "The rants and ramblings of a nerd on the edge.\nThis is my primary profile... for now. Still exploring the vast and growing federation.", + "url": "https://mastodon.bigdinosaur.org/@jbbdude", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/019/315/original/missing.png?1492703879", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/019/315/original/missing.png?1492703879", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/019/315/original/missing.png?1492703880", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/019/315/original/missing.png?1492703880", + "nico_url": null + }, + "media_attachments": [], + "mentions": [ + { + "url": "https://noagendasocial.com/@tomey", + "acct": "tomey@noagendasocial.com", + "id": "12677", + "username": "tomey" + }, + { + "url": "https://noagendasocial.com/@isaac", + "acct": "isaac@noagendasocial.com", + "id": "14084", + "username": "isaac" + }, + { + "url": "https://noagendasocial.com/@PhoneBoy", + "acct": "PhoneBoy@noagendasocial.com", + "id": "20375", + "username": "PhoneBoy" + } + ], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + }, + { + "name": "fediverse", + "url": "https://friends.nico/tags/fediverse" + }, + { + "name": "instances", + "url": "https://friends.nico/tags/instances" + } + ], + "uri": "tag:mastodon.bigdinosaur.org,2017-04-21:objectId=38903:objectType=Status", + "content": "

@tomey @isaac @PhoneBoy
There are already whitelist instances.

I disagree that it's \"stupid\". I just think it had to be made clearer that those are the rules for Mastodon.social and whoever else chooses to apply them, but not the entire #Mastodon #fediverse. That said, that means #instances choose who they federate with. You guys are just not popular.

Again, my concern is transparent, consistent policy in bans or whitelisting.

", + "url": "https://mastodon.bigdinosaur.org/users/jbbdude/updates/454", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "712113", + "created_at": "2017-04-21T14:54:11.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "29113", + "username": "armavi", + "acct": "armavi@framapiaf.org", + "display_name": "", + "locked": false, + "created_at": "2017-04-21T14:52:00.985Z", + "followers_count": 0, + "following_count": 0, + "statuses_count": 2, + "note": "", + "url": "https://framapiaf.org/@armavi", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/029/113/original/9f822f23b1f76d6e.png?1492786322", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/029/113/original/9f822f23b1f76d6e.png?1492786322", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/029/113/original/13c656fd499db69b.jpg?1492786324", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/029/113/original/13c656fd499db69b.jpg?1492786324", + "nico_url": null + }, + "media_attachments": [ + { + "id": "46852", + "remote_url": "https://social.tchncs.de/system/media_attachments/files/000/072/467/original/db8366db12ccfa06.png", + "type": "image", + "url": "https://d2zoeobnny43zx.cloudfront.net/media_attachments/files/000/046/852/original/db8366db12ccfa06.png?1492786540", + "preview_url": "https://d2zoeobnny43zx.cloudfront.net/media_attachments/files/000/046/852/small/db8366db12ccfa06.png?1492786540", + "text_url": null + } + ], + "mentions": [ + { + "url": "https://amicale.net/@cquest", + "acct": "cquest@amicale.net", + "id": "20509", + "username": "cquest" + }, + { + "url": "https://mastodon.etalab.gouv.fr/@cquest", + "acct": "cquest@mastodon.etalab.gouv.fr", + "id": "16110", + "username": "cquest" + } + ], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:framapiaf.org,2017-04-21:objectId=178893:objectType=Status", + "content": "

Il y a une instance #mastodon pour les personnels de l'État qui vient de s'ouvrir aux personnels éduc.
Je trouve bien qu'on teste des trucs dans l'administration!

Bon, il faut qu'on trouve un graphiste pour les couleurs de l'instance
cc @cquest @cquest
https://framapiaf.org/media/cLJI8QfPLw7ZZ4yKZyI

", + "url": "https://framapiaf.org/users/armavi/updates/14054", + "reblogs_count": 1, + "favourites_count": 0, + "reblog": null + }, + { + "id": "707791", + "created_at": "2017-04-21T14:47:42.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "1645", + "username": "itsumonotakumi", + "acct": "itsumonotakumi@pawoo.net", + "display_name": "いつもの匠:grin:✅", + "locked": false, + "created_at": "2017-04-19T10:11:42.023Z", + "followers_count": 59, + "following_count": 176, + "statuses_count": 38, + "note": "鍛冶屋とは何の関係もありません。匠が共有したい情報を発散します。\n\nWEB: https://takulog.info\nTwitter: @itsumonotakumi", + "url": "https://pawoo.net/@itsumonotakumi", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/001/645/original/18189d72d91acff7.png?1492596702", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/001/645/original/18189d72d91acff7.png?1492596702", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/001/645/original/4c1aab1e8d41564f.jpeg?1492596702", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/001/645/original/4c1aab1e8d41564f.jpeg?1492596702", + "nico_url": null + }, + "media_attachments": [ + { + "id": "46513", + "remote_url": "https://img.pawoo.net/media_attachments/files/000/233/726/original/35cb3534b1aae824.png", + "type": "image", + "url": "https://d2zoeobnny43zx.cloudfront.net/media_attachments/files/000/046/513/original/35cb3534b1aae824.png?1492786063", + "preview_url": "https://d2zoeobnny43zx.cloudfront.net/media_attachments/files/000/046/513/small/35cb3534b1aae824.png?1492786063", + "text_url": null + } + ], + "mentions": [], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + }, + { + "name": "公式アカウント", + "url": "https://friends.nico/tags/%E5%85%AC%E5%BC%8F%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88" + } + ], + "uri": "tag:pawoo.net,2017-04-21:objectId=2682366:objectType=Status", + "content": "

セキュリティ業界の有名人「徳丸 浩」さんを追加しました。

誰をフォローしたら良いか迷ってるマストドン初心者必見!


Mastodonユーザなら必ずフォローしたい✊ アカウント集
https://takulog.info/20170420you-ming-gou/

#Mastodon #公式アカウント https://pawoo.net/media/7irphvcmS8sO_K-rlEU

", + "url": "https://pawoo.net/users/itsumonotakumi/updates/1066707", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "707682", + "created_at": "2017-04-08T16:46:56.000Z", + "in_reply_to_id": "321430", + "in_reply_to_account_id": "19149", + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "19682", + "username": "jpcrevoisier", + "acct": "jpcrevoisier@oc.todon.fr", + "display_name": "Gimlith", + "locked": false, + "created_at": "2017-04-20T16:50:38.444Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 7, + "note": "Beau gosse, genre super balaise avec un corps de rêve, des muscles partout même la ou normalement y'en a pas. par contre, dit beaucoup de conneries :)", + "url": "https://oc.todon.fr/@jpcrevoisier", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/019/682/original/9f46604a8dc19513.png?1492707039", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/019/682/original/9f46604a8dc19513.png?1492707039", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/019/682/original/ee91247fe4340dcb.jpg?1492707041", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/019/682/original/ee91247fe4340dcb.jpg?1492707041", + "nico_url": null + }, + "media_attachments": [], + "mentions": [ + { + "url": "https://mstdn.fr/@amaelle_g", + "acct": "amaelle_g@mstdn.fr", + "id": "19149", + "username": "amaelle_g" + } + ], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:oc.todon.fr,2017-04-08:objectId=117350:objectType=Status", + "content": "

@amaelle_g Pas des tonnes de thunes non plus. Si ta déjà un serveur pour d'autre trucs, ca ne coute rien d'y ajouter #mastodon

", + "url": "https://oc.todon.fr/users/jpcrevoisier/updates/8301", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "706494", + "created_at": "2017-04-21T14:45:10.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "1645", + "username": "itsumonotakumi", + "acct": "itsumonotakumi@pawoo.net", + "display_name": "いつもの匠:grin:✅", + "locked": false, + "created_at": "2017-04-19T10:11:42.023Z", + "followers_count": 59, + "following_count": 176, + "statuses_count": 38, + "note": "鍛冶屋とは何の関係もありません。匠が共有したい情報を発散します。\n\nWEB: https://takulog.info\nTwitter: @itsumonotakumi", + "url": "https://pawoo.net/@itsumonotakumi", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/001/645/original/18189d72d91acff7.png?1492596702", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/001/645/original/18189d72d91acff7.png?1492596702", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/001/645/original/4c1aab1e8d41564f.jpeg?1492596702", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/001/645/original/4c1aab1e8d41564f.jpeg?1492596702", + "nico_url": null + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + }, + { + "name": "公式アカウント", + "url": "https://friends.nico/tags/%E5%85%AC%E5%BC%8F%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88" + } + ], + "uri": "tag:pawoo.net,2017-04-21:objectId=2681358:objectType=Status", + "content": "

さくらインターネットの社長を追加しました。


Mastodonユーザなら必ずフォローしたい✊ アカウント集
http://takulog.info/mastodon-famous-accounts/

#Mastodon #公式アカウント

", + "url": "https://pawoo.net/users/itsumonotakumi/updates/1066299", + "reblogs_count": 1, + "favourites_count": 1, + "reblog": null + }, + { + "id": "704669", + "created_at": "2017-04-21T14:39:10.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "29015", + "username": "bkastl", + "acct": "bkastl@mastodon.social", + "display_name": "Bianca Kastl", + "locked": false, + "created_at": "2017-04-21T14:41:45.261Z", + "followers_count": 0, + "following_count": 0, + "statuses_count": 1, + "note": "Frontend Developer at cron IT, Stuttgart, Germany, writing about webstuff", + "url": "https://mastodon.social/@bkastl", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/029/015/original/68b8f47e3c010521.jpg?1492785705", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/029/015/original/68b8f47e3c010521.jpg?1492785705", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/029/015/original/4801aa666aebfca6.jpeg?1492785705", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/029/015/original/4801aa666aebfca6.jpeg?1492785705", + "nico_url": null + }, + "media_attachments": [ + { + "id": "46315", + "remote_url": "https://files.mastodon.social/media_attachments/files/000/293/983/original/ac03185640e975f9.png", + "type": "image", + "url": "https://d2zoeobnny43zx.cloudfront.net/media_attachments/files/000/046/315/original/ac03185640e975f9.png?1492785705", + "preview_url": "https://d2zoeobnny43zx.cloudfront.net/media_attachments/files/000/046/315/small/ac03185640e975f9.png?1492785705", + "text_url": null + }, + { + "id": "46316", + "remote_url": "https://files.mastodon.social/media_attachments/files/000/293/986/original/09a759fa1e8f721c.png", + "type": "image", + "url": "https://d2zoeobnny43zx.cloudfront.net/media_attachments/files/000/046/316/original/09a759fa1e8f721c.png?1492785708", + "preview_url": "https://d2zoeobnny43zx.cloudfront.net/media_attachments/files/000/046/316/small/09a759fa1e8f721c.png?1492785708", + "text_url": null + } + ], + "mentions": [], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:mastodon.social,2017-04-21:objectId=3605998:objectType=Status", + "content": "

Lesson learned. There a \"fully\" connected instances and not so \"fully connected\" instances here on #mastodon. Which is a real blocker… imo… https://mastodon.social/media/QcYsblVneWKiLIIC6bU https://mastodon.social/media/mBnmy8AwhD4mL-7WVnw

", + "url": "https://mastodon.social/users/bkastl/updates/2013213", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "703792", + "created_at": "2017-04-21T14:39:57.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "4875", + "username": "testuser", + "acct": "testuser@mstdn.jp", + "display_name": "", + "locked": false, + "created_at": "2017-04-19T11:40:52.617Z", + "followers_count": 2, + "following_count": 3, + "statuses_count": 3, + "note": "Some note", + "url": "https://mstdn.jp/@testuser", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/004/875/original/ca59e2a95488a883.png?1492602052", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/004/875/original/ca59e2a95488a883.png?1492602052", + "header": "/headers/original/missing.png", + "header_static": "/headers/original/missing.png", + "nico_url": null + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:mstdn.jp,2017-04-21:objectId=2423979:objectType=Status", + "content": "

#mastodon test

", + "url": "https://mstdn.jp/users/testuser/updates/1210627", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "703683", + "created_at": "2017-04-21T14:39:42.000Z", + "in_reply_to_id": "701288", + "in_reply_to_account_id": "14084", + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "19315", + "username": "jbbdude", + "acct": "jbbdude@mastodon.bigdinosaur.org", + "display_name": "JBBdude", + "locked": false, + "created_at": "2017-04-20T15:57:58.784Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 82, + "note": "The rants and ramblings of a nerd on the edge.\nThis is my primary profile... for now. Still exploring the vast and growing federation.", + "url": "https://mastodon.bigdinosaur.org/@jbbdude", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/019/315/original/missing.png?1492703879", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/019/315/original/missing.png?1492703879", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/019/315/original/missing.png?1492703880", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/019/315/original/missing.png?1492703880", + "nico_url": null + }, + "media_attachments": [], + "mentions": [ + { + "url": "https://noagendasocial.com/@isaac", + "acct": "isaac@noagendasocial.com", + "id": "14084", + "username": "isaac" + }, + { + "url": "https://noagendasocial.com/@tomey", + "acct": "tomey@noagendasocial.com", + "id": "12677", + "username": "tomey" + }, + { + "url": "https://noagendasocial.com/@PhoneBoy", + "acct": "PhoneBoy@noagendasocial.com", + "id": "20375", + "username": "PhoneBoy" + } + ], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + }, + { + "name": "federation", + "url": "https://friends.nico/tags/federation" + }, + { + "name": "instances", + "url": "https://friends.nico/tags/instances" + } + ], + "uri": "tag:mastodon.bigdinosaur.org,2017-04-21:objectId=38812:objectType=Status", + "content": "

@isaac @tomey @PhoneBoy Well, this isn't actually a Tragedy of the Commons situation at all.

BUT yes, the principles of #federation are endangered in #Mastodon as more and more #instances block more and more other instances for potentially arbitrary reasons. Instance admins & mods aren't being consulted; blocks are first responses, not last resorts.

", + "url": "https://mastodon.bigdinosaur.org/users/jbbdude/updates/448", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "702781", + "created_at": "2017-04-21T14:33:57.000Z", + "in_reply_to_id": "696564", + "in_reply_to_account_id": "14660", + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "20437", + "username": "maiadereva", + "acct": "maiadereva@mamot.fr", + "display_name": ":cherry_blossom: Maïa Dereva", + "locked": false, + "created_at": "2017-04-20T19:05:26.844Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 33, + "note": "Contributrice aux #Communs - http://maiadereva.semeoz.info/ - #Commons #P2P #Psychology #Biology", + "url": "https://mamot.fr/@maiadereva", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/020/437/original/480f364db035b4b4.png?1492715128", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/020/437/original/480f364db035b4b4.png?1492715128", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/020/437/original/da99f5223ec26b39.jpg?1492715130", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/020/437/original/da99f5223ec26b39.jpg?1492715130", + "nico_url": null + }, + "media_attachments": [], + "mentions": [ + { + "url": "https://mamot.fr/@AdrienneCharmet", + "acct": "AdrienneCharmet@mamot.fr", + "id": "14660", + "username": "AdrienneCharmet" + } + ], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:mamot.fr,2017-04-21:objectId=602771:objectType=Status", + "content": "

@AdrienneCharmet Mouaf ! Une qui connaît pas encore #Mastodon alors ?

", + "url": "https://mamot.fr/users/maiadereva/updates/85598", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "701736", + "created_at": "2017-04-21T14:36:03.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "14734", + "username": "bthall", + "acct": "bthall@mastodon.social", + "display_name": "Brandon Hall ❎", + "locked": false, + "created_at": "2017-04-20T07:56:06.123Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 28, + "note": "I'm a Christian skateboarder, philosopher, and business scholar. Studying Philosophy and Economics. Anti-Drugs, Pro-Fungi.", + "url": "https://mastodon.social/@bthall", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/014/734/original/IMG_20161027_161300439.jpg?1492674966", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/014/734/original/IMG_20161027_161300439.jpg?1492674966", + "header": "/headers/original/missing.png", + "header_static": "/headers/original/missing.png", + "nico_url": null + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "awoo", + "url": "https://friends.nico/tags/awoo" + }, + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:mastodon.social,2017-04-21:objectId=3605286:objectType=Status", + "content": "

Today's the day of the competition. Please wish me luck, #Mastodon! The $1000 prize could really help me get my startup up off the ground. #awoo

", + "url": "https://mastodon.social/users/bthall/updates/2013072", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "701594", + "created_at": "2017-04-21T14:35:45.000Z", + "in_reply_to_id": "689155", + "in_reply_to_account_id": "28730", + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "14277", + "username": "benyomin", + "acct": "benyomin@aleph.land", + "display_name": "בנימן", + "locked": false, + "created_at": "2017-04-20T07:00:54.091Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 9, + "note": "", + "url": "https://aleph.land/@benyomin", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/014/277/original/a936245a6292d0c8.jpg?1492671655", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/014/277/original/a936245a6292d0c8.jpg?1492671655", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/014/277/original/78c44653e0c98061.jpg?1492671657", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/014/277/original/78c44653e0c98061.jpg?1492671657", + "nico_url": null + }, + "media_attachments": [], + "mentions": [ + { + "url": "https://mastodon.xyz/@Con", + "acct": "Con@mastodon.xyz", + "id": "28730", + "username": "Con" + } + ], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + }, + { + "name": "sjw", + "url": "https://friends.nico/tags/sjw" + } + ], + "uri": "tag:aleph.land,2017-04-21:objectId=337161:objectType=Status", + "content": "

@Con I think it had a few mentions with recent talk of account suspensions and bans at (non-federated mastodon clone) and (mySpace clone). So, what's the deal with #mastodon ? Is it easier for an instance sysop to ban you b/c they don't like your brand of speech? and/or is it easier for you to bounce back on another instance, but you could still loose all your history, right? are there like #SJW and non-SJW instances with different versions of free speech?

", + "url": "https://aleph.land/users/benyomin/updates/16247", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "700974", + "created_at": "2017-04-21T14:34:03.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "16986", + "username": "Auditoryprolif", + "acct": "Auditoryprolif@mastodon.art", + "display_name": "Auditory Proliferation", + "locked": false, + "created_at": "2017-04-20T12:19:37.912Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 139, + "note": "Audio Engineer, Producer, musician & performer, visual artist, writer, open source & Linux user, Bipolar I, lifelong #Chicago, and foodie!", + "url": "https://mastodon.art/@Auditoryprolif", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/016/986/original/140bda5dbd4ceeaf.JPG?1492785600", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/016/986/original/140bda5dbd4ceeaf.JPG?1492785600", + "header": "/headers/original/missing.png", + "header_static": "/headers/original/missing.png", + "nico_url": null + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:mastodon.art,2017-04-21:objectId=50668:objectType=Status", + "content": "

This really is a platform for creators and makers and all people who seem to care about and respect all forms of life. #mastodon

", + "url": "https://mastodon.art/users/Auditoryprolif/updates/1402", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "700396", + "created_at": "2017-04-21T14:32:58.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "16986", + "username": "Auditoryprolif", + "acct": "Auditoryprolif@mastodon.art", + "display_name": "Auditory Proliferation", + "locked": false, + "created_at": "2017-04-20T12:19:37.912Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 139, + "note": "Audio Engineer, Producer, musician & performer, visual artist, writer, open source & Linux user, Bipolar I, lifelong #Chicago, and foodie!", + "url": "https://mastodon.art/@Auditoryprolif", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/016/986/original/140bda5dbd4ceeaf.JPG?1492785600", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/016/986/original/140bda5dbd4ceeaf.JPG?1492785600", + "header": "/headers/original/missing.png", + "header_static": "/headers/original/missing.png", + "nico_url": null + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:mastodon.art,2017-04-21:objectId=50649:objectType=Status", + "content": "

At first I wanted all the birds to become #mastodon s , but now I see a lot more in less and without the extra in features and born followers and unabashed capitalists/nationalists so on

", + "url": "https://mastodon.art/users/Auditoryprolif/updates/1401", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "698356", + "created_at": "2017-04-21T03:53:17.000Z", + "in_reply_to_id": "698382", + "in_reply_to_account_id": "24560", + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "28903", + "username": "Blort", + "acct": "Blort@social.tchncs.de", + "display_name": "Not:white_check_mark:Verified", + "locked": false, + "created_at": "2017-04-21T14:29:20.577Z", + "followers_count": 0, + "following_count": 0, + "statuses_count": 2, + "note": "Born of star dust. Prone to fits of philosophy. Lovingly wrapped in the foss matrix. Devourer of organisms with cell walls. Quite possibly absurd... And you?", + "url": "https://social.tchncs.de/@Blort", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/028/903/original/3c2dfcc3fb9c6fe9.jpg?1492784961", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/028/903/original/3c2dfcc3fb9c6fe9.jpg?1492784961", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/028/903/original/4407afd5366d4aa4.jpg?1492784963", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/028/903/original/4407afd5366d4aa4.jpg?1492784963", + "nico_url": null + }, + "media_attachments": [], + "mentions": [ + { + "url": "https://mastodon.social/@frd", + "acct": "frd@mastodon.social", + "id": "24560", + "username": "frd" + } + ], + "tags": [ + { + "name": "youtube", + "url": "https://friends.nico/tags/youtube" + }, + { + "name": "facebook", + "url": "https://friends.nico/tags/facebook" + }, + { + "name": "foss", + "url": "https://friends.nico/tags/foss" + }, + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + }, + { + "name": "mediagoblin", + "url": "https://friends.nico/tags/mediagoblin" + }, + { + "name": "diaspora", + "url": "https://friends.nico/tags/diaspora" + }, + { + "name": "livestreaming", + "url": "https://friends.nico/tags/livestreaming" + } + ], + "uri": "tag:social.tchncs.de,2017-04-21:objectId=1054112:objectType=Status", + "content": "

@frd Social media video marketing for indie inventors, mainly. A lot of stuff on #YouTube and #Facebook, despite my #FOSS loathing of both, sadly. Would love for #Mastodon / #MediaGoblin / #Diaspora to grow into viable mainstream alternatives to both (with #Livestreaming! ). Moving more towards creating more educational, video products as they are more friendly to independent #FOSS hosting and distribution.

", + "url": "https://social.tchncs.de/users/Blort/updates/56946", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "696529", + "created_at": "2017-04-21T14:24:37.000Z", + "in_reply_to_id": "694480", + "in_reply_to_account_id": "18382", + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "28865", + "username": "Janseke", + "acct": "Janseke@mastodon.pirateparty.be", + "display_name": "Janseke", + "locked": false, + "created_at": "2017-04-21T14:26:03.538Z", + "followers_count": 0, + "following_count": 0, + "statuses_count": 1, + "note": "jan Pite Janseke /// ma Pantelen /// tenpo sike 2017 [lukin e nanpa sama \"tu mila luka luka luka tu\" ] ", + "url": "https://mastodon.pirateparty.be/@Janseke", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/028/865/original/f97764073cfa3a3d.jpg?1492784764", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/028/865/original/f97764073cfa3a3d.jpg?1492784764", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/028/865/original/missing.png?1492784766", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/028/865/original/missing.png?1492784766", + "nico_url": null + }, + "media_attachments": [], + "mentions": [ + { + "url": "https://meemu.org/@catgoat", + "acct": "catgoat@meemu.org", + "id": "18382", + "username": "catgoat" + } + ], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + }, + { + "name": "bird", + "url": "https://friends.nico/tags/bird" + }, + { + "name": "migration", + "url": "https://friends.nico/tags/migration" + }, + { + "name": "matodon", + "url": "https://friends.nico/tags/matodon" + }, + { + "name": "waso", + "url": "https://friends.nico/tags/waso" + }, + { + "name": "pana", + "url": "https://friends.nico/tags/pana" + }, + { + "name": "ale", + "url": "https://friends.nico/tags/ale" + } + ], + "uri": "tag:mastodon.pirateparty.be,2017-04-21:objectId=35603:objectType=Status", + "content": "

@catgoat :pineapple:

:bird: - :elephant: transfer completed...

toot ! :elephant:

#Mastodon #bird #migration
#Matodon #waso #pana #ale

", + "url": "https://mastodon.pirateparty.be/users/Janseke/updates/1112", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "696020", + "created_at": "2017-04-21T14:25:08.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "25499", + "username": "eulPingouin", + "acct": "eulPingouin@mamot.fr", + "display_name": "François Jeanmougin", + "locked": false, + "created_at": "2017-04-21T08:17:16.862Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 6, + "note": "", + "url": "https://mamot.fr/@eulPingouin", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/025/499/original/d8a48bf3ff836ffa.png?1492762638", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/025/499/original/d8a48bf3ff836ffa.png?1492762638", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/025/499/original/missing.png?1492762639", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/025/499/original/missing.png?1492762639", + "nico_url": null + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:mamot.fr,2017-04-21:objectId=602359:objectType=Status", + "content": "

Je suis sur #mastodon depuis, quoi, 24h, et j'arrête pas de penser \"dis camion!\"... Merde, ce retour au niveau collège, c'est grave, non ?

", + "url": "https://mamot.fr/users/eulPingouin/updates/85525", + "reblogs_count": 2, + "favourites_count": 0, + "reblog": null + }, + { + "id": "694556", + "created_at": "2017-04-21T14:22:26.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "21738", + "username": "timo_mee", + "acct": "timo_mee@oc.todon.fr", + "display_name": "Timo", + "locked": false, + "created_at": "2017-04-20T22:29:09.069Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 26, + "note": "Etudiant, amateur de politique et d'actualités, de journalisme et de sens critique, en un mot: amateur de la vie (c'est beau) ", + "url": "https://oc.todon.fr/@timo_mee", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/021/738/original/d43786a396e0c8a2.png?1492727350", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/021/738/original/d43786a396e0c8a2.png?1492727350", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/021/738/original/a9310cb2871f2b4e.png?1492727352", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/021/738/original/a9310cb2871f2b4e.png?1492727352", + "nico_url": null + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:oc.todon.fr,2017-04-21:objectId=522407:objectType=Status", + "content": "

Après plus d'une semaine sur #mastodon , je suis positivement surpris du niveau de discussion qu'on peut avoir. Y a des débats super intéressants qui se lancent, des réflexions et idées trop bien aussi, ça n'a plus rien à voir avec les tweets qui se répètent depuis 2013 écrits en language SMS (bon évidemment ici on a plus de place pour écrire, ça aide pour les débats intelligents).
Jaime de plus en plus ce réseau 😊

", + "url": "https://oc.todon.fr/users/timo_mee/updates/28023", + "reblogs_count": 0, + "favourites_count": 0, + "reblog": null + }, + { + "id": "693714", + "created_at": "2017-04-21T14:20:23.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "14660", + "username": "AdrienneCharmet", + "acct": "AdrienneCharmet@mamot.fr", + "display_name": "Adrienne Charmet", + "locked": false, + "created_at": "2017-04-20T07:48:42.385Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 165, + "note": "De l'Internet, de @LaQuadrature, des libertés, de la musique, des voyages. Et du perso.", + "url": "https://mamot.fr/@AdrienneCharmet", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/014/660/original/885a297c559c79d6.jpg?1492674523", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/014/660/original/885a297c559c79d6.jpg?1492674523", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/014/660/original/31be4bc20c31d4dd.jpg?1492674524", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/014/660/original/31be4bc20c31d4dd.jpg?1492674524", + "nico_url": null + }, + "media_attachments": [], + "mentions": [ + { + "url": "https://mamot.fr/@LaQuadrature", + "acct": "LaQuadrature@mamot.fr", + "id": "21367", + "username": "LaQuadrature" + } + ], + "tags": [ + { + "name": "funfact", + "url": "https://friends.nico/tags/funfact" + }, + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + } + ], + "uri": "tag:mamot.fr,2017-04-21:objectId=602084:objectType=Status", + "content": "

#FunFact

Mamot ça n'est pas simplement l'instance #Mastodon de @LaQuadrature, c'est aussi le

Ministère des Affaires Municipales et de l'Occupation du Territoire canadien ;)

http://www.mamot.gouv.qc.ca/accueil/

", + "url": "https://mamot.fr/users/AdrienneCharmet/updates/85473", + "reblogs_count": 9, + "favourites_count": 0, + "reblog": null + }, + { + "id": "692622", + "created_at": "2017-04-21T14:18:49.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "application": null, + "account": { + "id": "10478", + "username": "GinnyMcQueen", + "acct": "GinnyMcQueen@mastodon.social", + "display_name": "Ginny McQueen 🌻", + "locked": false, + "created_at": "2017-04-19T21:10:47.846Z", + "followers_count": 1, + "following_count": 0, + "statuses_count": 136, + "note": "Bastard ⍟ Orphan ⍟ Loved By #Cats ⍟ Hated By Nazis ⍟ #LosAngeles 🙏 http://patreon.com/ginnymcqueen 💸 http://paypal.me/ginnymcqueen 🎁 http://a.co/au3kqHt", + "url": "https://mastodon.social/@GinnyMcQueen", + "avatar": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/010/478/original/232a9261173837fb.jpg?1492636248", + "avatar_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/avatars/000/010/478/original/232a9261173837fb.jpg?1492636248", + "header": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/010/478/original/184638e8af046d1c.jpg?1492636248", + "header_static": "https://d2zoeobnny43zx.cloudfront.net/accounts/headers/000/010/478/original/184638e8af046d1c.jpg?1492636248", + "nico_url": null + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "mastodon", + "url": "https://friends.nico/tags/mastodon" + }, + { + "name": "trending", + "url": "https://friends.nico/tags/trending" + } + ], + "uri": "tag:mastodon.social,2017-04-21:objectId=3601768:objectType=Status", + "content": "

How to see what's #trending on #Mastodon:

-go to the search bar
-type in \"Ginny McQueen\"

- it me

", + "url": "https://mastodon.social/users/GinnyMcQueen/updates/2012378", + "reblogs_count": 1, + "favourites_count": 0, + "reblog": null + } +]