Exemple #1
0
        public static void LoadTrends(string sqlConnectionString, string twitterConsumerKey, string twitterConsumerSecret, string twitterAccessToken, string twitterAccessTokenSecret, Action <string> LogError)
        {
            var request = new RestRequest("1.1/trends/place.json", Method.GET);

            request.AddQueryParameter("id", "23424977");
            request.AddQueryParameter("result_type", "popular");

            var client = new RestClient("https://api.twitter.com")
            {
                Authenticator = OAuth1Authenticator.ForProtectedResource(
                    twitterConsumerKey,
                    twitterConsumerSecret,
                    twitterAccessToken,
                    twitterAccessTokenSecret)
            };

            IRestResponse response  = client.Execute(request);
            var           content   = response.Content; // raw content as string
            dynamic       stuff     = JsonConvert.DeserializeObject(content);
            string        startTime = DBUtility.ExecuteScalar(sqlConnectionString, "SELECT FORMAT(GETDATE() , 'M/d/yy HH:mm')").ToString();

            bool updatesMade = false;

            foreach (JObject item in stuff)
            {
                foreach (var trend in item["trends"])
                {
                    string trendName = "";
                    double?score     = 0;

                    try
                    {
                        int volume = 0;
                        Int32.TryParse(trend["tweet_volume"].ToString(), out volume);
                        List <SqlParameter> sparams = new List <SqlParameter>();

                        trendName = trend["name"].ToString();
                        var tweets = GetTweetsAsync(trendName, 10, twitterConsumerKey, twitterConsumerSecret, twitterAccessToken, twitterAccessTokenSecret);

                        if (tweets == null || volume == 0)
                        {
                            continue;
                        }

                        score = GetVaderSentAvgAsync(tweets.Result).Result;

                        sparams.Add(new SqlParameter("@NAME", trendName));
                        sparams.Add(new SqlParameter("@URL", trend["url"].ToString()));
                        sparams.Add(new SqlParameter("@TWEETVOLUME", volume));
                        sparams.Add(new SqlParameter("@AVGSENTIMENT", score));
                        sparams.Add(new SqlParameter("@USERENTRY", false));
                        sparams.Add(new SqlParameter("@DATE", startTime));
                        DBUtility.ExecuteQuery(sqlConnectionString, "spInsertTrend", sparams);
                        updatesMade = true;
                    }
                    catch (Exception e)
                    {
                        LogError($"Trend:{trendName} Score:{score} {e.ToString()}");
                    }
                }
            }

            // UPDATES WERE MADE LETS ZERO OUT ORPHANED TRENDS
            if (updatesMade)
            {
                var dt = DBUtility.GetDataTable(sqlConnectionString, "spSelectOrphanedTrends", new List <SqlParameter> {
                    new SqlParameter("@LOADTIME", startTime)
                });
                foreach (DataRow dr in dt.Rows)
                {
                    List <SqlParameter> sqlp = new List <SqlParameter>();
                    sqlp.Add(new SqlParameter("@NAME", dr["Name"].ToString()));
                    sqlp.Add(new SqlParameter("@URL", dr["URL"].ToString()));
                    sqlp.Add(new SqlParameter("@TWEETVOLUME", Convert.ToInt32(0)));
                    sqlp.Add(new SqlParameter("@AVGSENTIMENT", Convert.ToInt32(0)));
                    sqlp.Add(new SqlParameter("@USERENTRY", true));
                    sqlp.Add(new SqlParameter("@DATE", startTime));
                    DBUtility.ExecuteQuery(sqlConnectionString, "spInsertTrend", sqlp);
                }
            }
        }
Exemple #2
0
        public async Task <(int ReturnCode, decimal?Balance)> InsertOrder(Order newOrder, Guid orderId, int status)
        {
            var dt = await DBUtility.GetDataTableAsync(opts.ConnectionString, "spSelectUserBalance", new List <SqlParameter> {
                new SqlParameter("@USERID", this.userId)
            });

            var balance = Convert.ToDecimal(dt.Rows[0][0]);

            dt = await DBUtility.GetDataTableAsync(opts.ConnectionString, "spSelectUserShares", new List <SqlParameter> {
                new SqlParameter("@USERID", this.userId), new SqlParameter("@TRENDNAME", newOrder.TrendName)
            });

            var totalTrendShares = Convert.ToDecimal(dt.Rows[0][0]);

            decimal amount           = newOrder.Price * newOrder.Quantity;
            decimal newBalance       = (newOrder.TradeTypeId == 1) ? balance - amount : balance + amount;
            decimal newShareQuantity = 0;

            //// IM TRYING TO BUY/SELL ZERO SHARES
            if (newOrder.Quantity <= 0)
            {
                return(1, null);
            }

            //// IM TRYING TO BUY/SELL TRENDS WITH A PRICE OF ZERO
            if (newOrder.Price == 0)
            {
                return(4, null);
            }

            //// IM TRYING TO BUY STUFF
            if (newOrder.TradeTypeId == 1)
            {
                // I DONT HAVE ENOUGH FUNDS TO BUY SHARES
                if (newBalance < 0)
                {
                    return(2, null);
                }
                // I DO HAVE ENOUGH FUNDS TO BUY SHARES
                else
                {
                    newShareQuantity = totalTrendShares + newOrder.Quantity;
                }
            }

            //// IM TRYING TO SELL STUFF
            if (newOrder.TradeTypeId == 2)
            {
                // I DONT HAVE ANY OR ENOUGH SHARES THAT IM TRYING TO SELL
                if (totalTrendShares < newOrder.Quantity)
                {
                    return(3, null);
                }
                // I DO HAVE ENOUGH SHARES TO SELL
                else
                {
                    newShareQuantity = totalTrendShares - newOrder.Quantity;
                }
            }

            List <SqlParameter> parameters = new List <SqlParameter>();

            parameters.Add(new SqlParameter("@ORDERID", orderId));
            parameters.Add(new SqlParameter("@USERID", newOrder.UserId));
            parameters.Add(new SqlParameter("@TRENDID", newOrder.TrendId));
            parameters.Add(new SqlParameter("@TRENDNAME", newOrder.TrendName));
            parameters.Add(new SqlParameter("@TRADETYPEID", newOrder.TradeTypeId));
            parameters.Add(new SqlParameter("@ACTIVITYID", newOrder.TradeTypeId));
            parameters.Add(new SqlParameter("@PRICE", newOrder.Price));
            parameters.Add(new SqlParameter("@QUANTITY", newOrder.Quantity));
            parameters.Add(new SqlParameter("@TOTALAMOUNT", amount));
            parameters.Add(new SqlParameter("@NEWBALANCE", newBalance));
            parameters.Add(new SqlParameter("@STATUS", status));
            parameters.Add(new SqlParameter("@NEWQUANTITY", newShareQuantity));
            await DBUtility.ExecuteQueryAsync(opts.ConnectionString, "spInsertOrder", parameters);

            return(0, newBalance);
        }