Address: UNOS__VCYTkpd9bxvI5C8ATZw6qIc1SMYfA01v9rxIQ
It is a community permafeed aggregator powered by the Arweave, Hapi.js, and Vue with a twist of sentiment analysis. You can explore posts using dates, categories, sentiment, reading time, language, author and more.
Why this is interesting, well maybe you need to make a decision based on the current state of the ecosystem or maybe do you need to understand why the cryptocurrentins are falling down today, or have a good time reading news, or practice reading news in another language. So having this information and making more visible the perception of the sentiment, will help to gain knowledge, take a decision, stay updated with news that the community considered relevant or just having fun.
Each element of the feed will have the following attributes, let's divide the spect in two parts:
The tags have the following attributes:
- Feed-Name: String Relevant is the name of the feed.
- Feed-Version: String Relevant at this moment, is in version 1.0. Posible elements to increment the version will be adding atrributes, changing the algorithm, etc.
- Sentiment-Rate: Integer The analisis have a range of -5 to 5 to measure the sentiment of the post, this data is rounded, to exact rate see the body estructure
- Sentiment-Group: String Options(Pessimistic, Optimistic, Neutral) Instead of using numbers is also posible query for post using groups where Pessimistic will be Sentiment-Rate less than -1, Optimistic when Sentiment-Rate greater than 1 and Neutral between -1,1.
- Publication-Date: String This is the date when the post was publised, has the format YYYY-MM-DD
- Publication-Time: String This is the time when the post was publised, has the format HH:MM
- Publication-Feed: String This is a URL of the feed that is queried every hour to retrieve the most recent posts
- URL: String Indicate the url of the current post
- Language: String Is the language that the post manages
- Publication-Author: String To know who is the mind or minds betwwen this resource
- Category-0: String Category of the post, this is provided by the authors
- Category-1: String Category of the post, this is provided by the authors
- Category-2: String Category of the post, this is provided by the authors
- Category-3: String Category of the post, this is provided by the authors
- Category-4: String Category of the post, this is provided by the authors
- Content-Type: String The format in which the data is stored, only ‘application/json’
- Copyright’: Boolean Indicates if the current corrent is published with copyrights
- content: String This is the actual content of the post
- title: String Title provided in the metatags
- link: String Url to identify the resource
- guid: String Universal or permanent url to identify the resource
- publicationDate: String Full Publication date time ISO 8601
- author: String The author of the content
- site: Object To easy access the site data is encapsulated also in the body
- description: String The description of the site
- title": String The name of the site
- copyright: Boolean Indicates if the data provided by the site has copyrights
- readingStats: Object To busy people we provided the estimated time to read the content
- text: String The estimated time in human format
- minutes: Float Time in minutes
- time: Integer time in milliseconds
- words: Integer The number of words in the content
- sentiment: Object Sentiment rate with out modification
- rate: Float Exact rate for sentiment analysis
- group: String Options(Pessimistic, Optimistic, Neutral) Instead of using numbers is also posible query for post using groups where Pessimistic will be Sentiment-Rate less than -1, Optimistic when Sentiment-Rate greater than 1 and Neutral between -1,1.
- description: String Meta description of the post
- categories: Array[String] Full array of categories
- media: Object If the post have a thumbanail or image, this describe such element
- url: String URL of the image
- length: Integer Length in bytes of the image
- type: String Content Type of the image
Lets suppose we want retrieve the posts releated to bitcoin, to do this let's create a query for each category and each category will be compared with the word 'bitcoin':
query RelevantSearchByCategory($category: String! = "bitcoin"){
category_0: transactions(tags: [{name: "Feed-Name", value: "Relevant"}, {name: "Category_1", value: $category}]) { ...categoriesMatch },
category_1: transactions(tags: [{name: "Feed-Name", value: "Relevant"}, {name: "Category_0", value: $category}]) { ...categoriesMatch },
category_2: transactions(tags: [{name: "Feed-Name", value: "Relevant"}, {name: "Category_2", value: $category}]) { ...categoriesMatch },
category_3: transactions(tags: [{name: "Feed-Name", value: "Relevant"}, {name: "Category_3", value: $category}]) { ...categoriesMatch }
}
fragment categoriesMatch on Transaction {
id,
tags {
name
value
}
}
This will produce an out similat to this:
{
"data": {
"category_0": {...},
"category_1": {...},
"category_2": {...},
"category_3": {...}
}
}
Also if you have little time to read, lets choose posts with an estimated time of one minute:
query {
transactions(tags: [
{name: "Feed-Name", value: "Relevant"},
{name: "Reading-Time", value: "1"}]) {
id,
tags {
name
value
}
}
}
query {
category_0: transactions(tags: [
{name: "Feed-Name", value: "Relevant"},
{name: "Publication-Lang", value: "ES"},
{name: "Sentiment-Group", value: "Neutral"},
{name: "Category_0", value: "blockchain"}
]) { id, tags { name, value}},
category_1: transactions(tags: [
{name: "Feed-Name", value: "Relevant"},
{name: "Publication-Lang", value: "ES"},
{name: "Sentiment-Group", value: "Neutral"},
{name: "Category_1", value: "blockchain"}
]) { id, tags { name, value}},
category_2: transactions(tags: [
{name: "Feed-Name", value: "Relevant"},
{name: "Publication-Lang", value: "ES"},
{name: "Sentiment-Group", value: "Neutral"},
{name: "Category_2", value: "blockchain"}
]) { id, tags { name, value}},
category_3: transactions(tags: [
{name: "Feed-Name", value: "Relevant"},
{name: "Publication-Lang", value: "ES"},
{name: "Sentiment-Group", value: "Neutral"},
{name: "Category_3", value: "blockchain"}
]) { id, tags { name, value}},
category_4: transactions(tags: [
{name: "Feed-Name", value: "Relevant"},
{name: "Publication-Lang", value: "ES"},
{name: "Sentiment-Group", value: "Neutral"},
{name: "Category_4", value: "blockchain"}
]) { id, tags { name, value}}
}
Since January 13th, 2019 to today January 17th, 2019 the value of BTC and ETH has increase its value, so what the people says when all begins:
query {
neutral: transactions(tags: [
{name: "Feed-Name", value: "Relevant"},
{name: "Publication-Date", value: "2020-01-13"},
]) { id, tags { name, value}},
}
yarn install
The project stores info about the sites to haverst its feed, So we need to up mongo to store such data as following:
docker run -d -p 127.0.0.1:27017:27017 --name mongo mongo
Before start the permafeed agregator/app ensure you have enough funds to save posts/news to Arwaeave!
node main.js -w wallet.json -p 80 -H 0.0.0.0
If you have some error with respect to insecure content I recommend use certbot and nginx to configure ssl certificates. Go this site for more details: https://certbot.eff.org/lets-encrypt/ubuntubionic-nginx Also, you can open an issue in this repo to provide this configuration.
Run your instance and give them a thematic My instance is focusing on stay relevant in the crypto ecosystem adding news sites, technical posts from arweave medium, gitcoin blog , and so on.
- Add your feed url, the harvest of the seed takes one hour to search for new news. So maybe in an hour or less the site will start requesting your feed data.
As a side note, you can submit again your site to force harvest the feed.
- Wait patiently or just have fun with the current posts.
The current instance have already this feeds but could take a while that each site listed here take at least one post published:
- https://www.coindesk.com/feed
- https://cointelegraph.com/rss
- https://toshitimes.com/feed/
- https://www.newsbtc.com/feed/
- https://coinidol.com/rss2/
- https://cryptobriefing.com/feed/
- https://btcmanager.com/feed/
- https://dailyhodl.com/feed/
- https://www.theblockcrypto.com/rss.xml
- https://www.cryptoglobe.com/latest/feed/
- https://www.coinspeaker.com/feed/
- https://insidebitcoins.com/feed
- http://dippli.com/feed/
- https://www.btcwires.com/feed/
- https://www.the-blockchain.com/feed/
- https://coinfrenzy.io/feed/
Spanish
- https://www.diariobitcoin.com/index.php/feed
- https://es.cointelegraph.com/rss
- https://www.criptonoticias.com/feed/
- https://observatorioblockchain.com/feed/
- https://cryptomagazine.co/feed/
- https://criptotendencia.com/feed/
Italian
- https://it.cointelegraph.com/rss
- https://it.coinidol.com/rssshort/
- https://it.cryptonews.com/news/feed
French
See LICENSE