Наконец-то спецификация Activity Streams 2.0 приближается к стадии рекомендации W3C Candidate. Надеюсь, CR опубликует где-нибудь на следующей неделе.
Напоминаем, что Activity Streams - это синтаксис JSON для описания Activity (социального или другого). Например, выражение «Криста добавила фотографию в альбом» можно представить с помощью JSON, например:
{ "@context": "http://www.w3.org/ns/activitystreams", "actor": { "id": "http://krista.example.org", "name": "Krista", "type": "Person" }, "type": "Add", "object": { "id": "http://photos.example.org/id/123abc", "type": "Image", "name": "Picture of my Cat", "url": "http://photos.example.org/id/123abc.png" }, "target": { "id": "http://albums.example.org/id/cat-pics", "name": "My Cat Pics", "url": "http://albums.example.org/id/cat-pics" } }
Спецификация Activity Streams 2.0 состоит из двух частей:
- Ядро - https://www.w3.org/TR/activitystreams-core/
- Словарь - https://www.w3.org/TR/activitystreams-vocabulary/
Спецификация Core описывает сериализацию JSON, тогда как спецификация Vocabulary определяет типы объектов и свойства, которые могут быть представлены.
Что нового в AS 2.0?
Первая версия спецификации Activity Streams была опубликована в 2011 году по адресу http://activitystrea.ms/specs/json/1.0/. Версия 2.0 представляет собой значительную эволюцию, которая обеспечивает:
- Улучшенная интернационализация с явным языковым контекстом и поддержкой двунаправленного текста;
- Улучшенная расширяемость за счет поддержки JSON для связанных данных;
- Опционально упорядоченные коллекции и встроенная поддержка разбиения по страницам;
- Поддержка непереходных (или безобъектных) действий (например, действий, в которых актер также является объектом, например «Джо путешествует»);
- Первоклассная модель Link;
- 28 встроенных общих типов Активностей;
- 13 встроенных общих типов объектов, включая тип Tombstone, используемый для представления удаленных объектов, и тип отношения, используемый для представления отношений в социальных сетях;
- Встроенный таргетинг на аудиторию (ранее это было расширением Activity Streams 1.0);
- Встроенные геотеги;
- Возможность идентифицировать как источник, так и место назначения действия (например, «Аарон переместил документ из папки A в папку B»);
- Умение описывать результат Деятельности;
- И многое другое…
Как я могу его использовать?
Если вы используете Node.js, то можете использовать созданную мной реализацию JavaScript. Просто сделайте:
$ npm install activitystrea.ms
Модуль поддерживает создание и потребление объектов Activity Streams 2.0, но сам по себе не выполняет никакого сохранения. Чтобы создать действие:
const as = require('activitystrea.ms'); const activity = as.add() .actor(as.person() .id('http://krista.example.org') .name('Krista')) .object(as.image() .id('http://photos.example.org/id/123abc') .name('Picture of my Cat') .url('http://photos.example.org/id/123abc.png')) .target(as.object() .id('http://albums.example.org/id/cat-pics') .name('My Cat Pics') .url('http://albums.example.org/id/cat-pics')) .get();
Чтобы сериализовать объект `activity` как JSON, вызовите метод` write () `или` prettyWrite () `:
activity.prettyWrite((err, doc) => { if (err) throw err; console.log(doc); // doc will be a string });
Обратите внимание, что методы write () и prettyWrite () являются асинхронными только потому, что есть некоторые вещи JSON-LD, которые требуют асинхронной обработки.
Анализировать сериализованное действие очень просто. В следующем примере показан синтаксический анализ с использованием потока:
const as = require('activitystrea.ms'); const fs = require('fs'); const AS2Stream = as.Stream; const path = require('path'); const through = require('through2'); fs.createReadStream(path.resolve(__dirname,'test.json')) .pipe(new AS2Stream()) .pipe(through.obj((obj,encoding,callback) => { console.log(obj.type); console.log(obj.name); }));
Просмотрите модули activitystrea.ms README.md для получения дополнительных сведений об API.