# Contribution Guide
-TODO
+
+## Guidelines
+
+* Don't push directly to the `master` branch.
+* Create a new branch from `master` for new features. For best pratice, prefix it with the name of your service, e.g. `twitter-fix-something`.
+* Use Merge Requests (MRs) instead of directly pushing to master.
+* Don't accept your own MRs, unless they are actually minor, like changing a `README` file. Otherwise ask someone else to test it.
+
+
+## Don't do this
+
+* Force pushing to remote branches, especially master. It's usually uncessary, just fix your own feature branch.
+* Rebasing or resetting remote branches. Doing it locally is fine. If you want to undo an already pushed commit, push a revert commit.
+* Squashing commits. I'm personally fine with it, but I think someone was against it? Not sure if it was a tutor, or not.
## run with docker
- `docker build -t sentiment_analysis .`
-- `docker run -d -p YOUR_PORT:8081 sentiment_analysis`
+- `docker container run -d -p YOUR_PORT:8081 sentiment_analysis`
## run local
### requirements
import json
import indicoio
-from flask import Flask, request, jsonify
+from flask import Flask, request, jsonify, Response
from flask_restful import Resource, Api, output_json, abort
app = Flask(__name__)
indicoio.config.api_key = '525f16078717a430f9dac17cdc9dbaa3'
-input_error_409 = 'Input must be a JSON string. JSON objects must contain contain key text.'
+input_error_409 = 'Input must be a list of JSON objects. JSON objects must contain contain key text.'
service_error_503 = 'The sentiment analysis service is currently unavailable.'
class Sentiment_Analysis(Resource):
def get(self):
- return "POST a JSON string as content-type: application/json. JSON objects must contain key 'text'."
+ return "POST a list of JSON objects as content-type: application/json. JSON objects must contain key 'text'.", 405, {'Allow': 'GET'}
def post(self):
- if not request.json:
+ if not request.json or not isinstance(request.json, (list,)):
return abort(409, message=input_error_409)
texts = request.json
text_array = []
return make_error(503, message=service_error_503)
sentiment = value/len(text_array)
data = {'sentiment': sentiment}
- return output_json(json.dumps(data), 200)
+ return data
api.add_resource(Sentiment_Analysis, '/')
package at.aic18.g6t4.servicetwitter.configuration;
+import lombok.Getter;
+import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
@ConfigurationProperties(prefix = "twitter4j")
@Validated
+@Getter
+@Setter
public class Twitter4jProperties {
@Valid private final OAuth oauth = new OAuth();
private boolean debug = false;
- public OAuth getOauth() {
- return oauth;
- }
-
- public boolean isDebug() {
- return debug;
- }
-
- public void setDebug(boolean debug) {
- this.debug = debug;
- }
-
+ @Getter
+ @Setter
public static class OAuth {
@NotEmpty private String consumerKey;
@NotEmpty private String accessToken;
@NotEmpty private String accessTokenSecret;
- public String getConsumerKey() {
- return consumerKey;
- }
-
- public void setConsumerKey(String consumerKey) {
- this.consumerKey = consumerKey;
- }
-
- public String getConsumerSecret() {
- return consumerSecret;
- }
-
- public void setConsumerSecret(String consumerSecret) {
- this.consumerSecret = consumerSecret;
- }
-
- public String getAccessToken() {
- return accessToken;
- }
-
- public void setAccessToken(String accessToken) {
- this.accessToken = accessToken;
- }
-
- public String getAccessTokenSecret() {
- return accessTokenSecret;
- }
-
- public void setAccessTokenSecret(String accessTokenSecret) {
- this.accessTokenSecret = accessTokenSecret;
- }
-
}
}
+++ /dev/null
-package at.aic18.g6t4.servicetwitter.exception;
-
-public class SearchException extends Exception {
-
- public SearchException() {
- super();
- }
-
- public SearchException(String message) {
- super(message);
- }
-
- public SearchException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public SearchException(Throwable cause) {
- super(cause);
- }
-
-}
}
public List<Tweet> searchTweets(String queryString) throws TwitterException {
- Query query = new Query(queryString);
+ String excludeRetweets = " exclude:retweets";
+ Query query = new Query(queryString + excludeRetweets);
query.count(10);
QueryResult queryResult = twitter.search(query);
List<Status> statusList = queryResult.getTweets();
-debug: true
+debug: false
spring:
jackson:
port: 8084
twitter4j:
- debug: true
+ debug: false
oauth:
consumer-key: "DnmBShVqvJ2xfnRjkAWtq644Z"
consumer-secret: "YbP2oAdU9IyuYMAUxbyJn1NNKZ91jnOz1CpNKMSCjCR0Pu8JlJ"