Skip to content

Commit

Permalink
TRELLO-2174 : fix endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
ssedoudbgouv committed Feb 12, 2024
1 parent 6d5f313 commit f03199f
Show file tree
Hide file tree
Showing 8 changed files with 152 additions and 25 deletions.
2 changes: 1 addition & 1 deletion app/controllers/SocialNetworkController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class SocialNetworkController(
influencerOrchestrator
.get(name, socialNetworkSlug)
)
.map(_.getOrElse(Seq.empty))
.map(_.getOrElse(false))
.map(result => Ok(Json.toJson(result)))

}
Expand Down
5 changes: 2 additions & 3 deletions app/orchestrators/socialmedia/InfluencerOrchestrator.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package orchestrators.socialmedia

import models.report.SocialNetworkSlug
import models.report.socialnetwork.CertifiedInfluencer
import repositories.influencer.InfluencerRepositoryInterface

import scala.concurrent.ExecutionContext
Expand All @@ -13,6 +12,6 @@ class InfluencerOrchestrator(
val executionContext: ExecutionContext
) {

def get(name: String, socialNetwork: SocialNetworkSlug): Future[Seq[CertifiedInfluencer]] =
influencerRepository.get(name, socialNetwork)
def get(name: String, socialNetwork: SocialNetworkSlug): Future[Boolean] =
influencerRepository.get(name, socialNetwork).map(_.nonEmpty)
}
70 changes: 70 additions & 0 deletions app/orchestrators/socialmedia/SocialBladeClient.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package orchestrators.socialmedia

import cats.implicits.catsSyntaxApplicativeId
import models.report.SocialNetworkSlug
import play.api.Logger
import sttp.client3.asynchttpclient.future.AsyncHttpClientFutureBackend
import sttp.client3.HttpURLConnectionBackend
import sttp.client3.UriContext
import sttp.client3.basicRequest

import scala.concurrent.ExecutionContext
import scala.concurrent.Future

class SocialBladeClient()(implicit ec: ExecutionContext) {

val logger = Logger(this.getClass)
AsyncHttpClientFutureBackend()

def checkSocialNetworkUsername(
platform: SocialNetworkSlug,
username: String
): Future[Option[String]] = {

val request = basicRequest
.get(uri"https://socialblade.com/youtube/user/carolinereceveur")
.header(
"User-Agent",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
)

val backend = HttpURLConnectionBackend()
val response = request.send(backend)

// val lowercaseUsername = username.toLowerCase()
// val url = uri"https://socialblade.com/${platform.entryName.toLowerCase}/user/$lowercaseUsername"
// val request = emptyRequest
// .headers(
// Header.userAgent(
// "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
// )
// )
// .get(url)
// .response(asString)

println(s"------------------ request.toCurl = ${request.toCurl} ------------------")
//
// request
// .send(backend)
// .flatMap { response =>
// if (response.code.isSuccess) {
// response.body match {
// case Right(product) =>
// logger.debug(s"Call success")
// Future.successful(Option.when(findUserName(product, lowercaseUsername))(lowercaseUsername))
// case Left(error) =>
// logger.warnWithTitle("social_blade_error", s"Error while calling Socialblade: ${error}")
// Future.successful(None)
// }
// } else {
// logger.warnWithTitle("social_blade_error", s"Error while calling Socialblade: ${response.code}")
// Future.successful(None)
// }
// }

println(response)

response.body.toOption.pure[Future]
}

}
2 changes: 1 addition & 1 deletion app/repositories/influencer/InfluencerRepository.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class InfluencerRepository(override val dbConfig: DatabaseConfig[JdbcProfile])(i
override def get(name: String, socialNetwork: SocialNetworkSlug) = db.run(
table
.filter { result =>
(result.name <-> (name: String)).<(0.55)
result.name.toLowerCase === (name.toLowerCase: String)
}
.filter(_.socialNetwork === (socialNetwork: SocialNetworkSlug))
.result
Expand Down
22 changes: 22 additions & 0 deletions generatesql.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/bash
# Path to your CSV file
CSV_FILE="20240203_155429_checked.csv"

# Path to the output file
outputFile="$(date +"%Y%m%d_%H%M%S")_output.sql"

# Ensure the output file is empty before starting to append data
> "$outputFile"

# Skip the header row and process each line
tail -n +2 "$CSV_FILE" | while IFS=, read -r social_network name
do
# Generate a UUID for each row. Adjust based on your system's uuid generation command
ID=$(uuidgen)

# Capitalize the first letter of social_network using awk
social_network=$(echo "$social_network" | awk '{print toupper(substr($0, 1, 1)) tolower(substr($0, 2))}')

# Print the INSERT statement and append to the output file
echo "INSERT INTO influencers (id, social_network, name) VALUES ('$ID', '$social_network', '$name');" >> "$outputFile"
done
27 changes: 27 additions & 0 deletions getRequest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
const https = require('https');

const options = {
hostname: 'socialblade.com',
path: '/youtube/user/carolinereceveur',
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/114.0',
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3',
}
};

const req = https.request(options, res => {
console.log(`statusCode: ${res.statusCode}`);

res.on('data', d => {
process.stdout.write(d);
});
});

req.on('error', error => {
console.error(error);
});

req.end();

42 changes: 22 additions & 20 deletions project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -56,26 +56,27 @@ object Dependencies {
val janino = "org.codehaus.janino" % "janino" % Versions.janino // Needed for the <if> in logback conf
val commonsCompiler = "org.codehaus.janino" % "commons-compiler" % Versions.janino // Needed for janino
val logstashLogBackEncoder = "net.logstash.logback" % "logstash-logback-encoder" % Versions.logstashLogbackEncoder
val sttpPlayJson = "com.softwaremill.sttp.client3" %% "play-json" % Versions.sttpPlayJson
val sttp = "com.softwaremill.sttp.client3" %% "core" % Versions.sttp
val sentry = "io.sentry" % "sentry-logback" % Versions.sentryVersion
val catsCore = "org.typelevel" %% "cats-core" % Versions.catsCoreVersion
val pureConfig = "com.github.pureconfig" %% "pureconfig" % Versions.pureConfigVersion
val playJsonExtensions = "ai.x" %% "play-json-extensions" % Versions.playJsonExtensionsVersion
val playSlick = "com.typesafe.play" %% "play-slick" % Versions.playSlickVersion
val slickPg = "com.github.tminglei" %% "slick-pg" % Versions.slickPgVersion
val slickPgPlayJson = "com.github.tminglei" %% "slick-pg_play-json" % Versions.slickPgVersion
val alpakkaSlick = "com.lightbend.akka" %% "akka-stream-alpakka-slick" % Versions.alpakkaVersion
val playMailer = "org.playframework" %% "play-mailer" % Versions.playMailerVersion
val alpakkaS3 = "com.lightbend.akka" %% "akka-stream-alpakka-s3" % Versions.alpakkaVersion
val alpakkaCSV = "com.lightbend.akka" %% "akka-stream-alpakka-csv" % Versions.alpakkaVersion
val alpakkaFile = "com.lightbend.akka" %% "akka-stream-alpakka-file" % Versions.alpakkaVersion
val akkaHttp = "com.typesafe.akka" %% "akka-http" % Versions.akkaHttpVersion
val akkaHttpXml = "com.typesafe.akka" %% "akka-http-xml" % Versions.akkaHttpVersion
val jbcrypt = "org.mindrot" % "jbcrypt" % "0.4"
val enumeratum = "com.beachape" %% "enumeratum" % Versions.enumeratumVersion
val enumeratumPlay = "com.beachape" %% "enumeratum-play" % Versions.enumeratumVersion
val awsJavaSdkS3 = "com.amazonaws" % "aws-java-sdk-s3" % Versions.awsJavaSdkS3Version
val sttpPlayJson = "com.softwaremill.sttp.client3" %% "play-json" % Versions.sttpPlayJson
val sttp = "com.softwaremill.sttp.client3" %% "core" % Versions.sttp
val asyncSttp = "com.softwaremill.sttp.client3" %% "async-http-client-backend-future" % Versions.sttp
val sentry = "io.sentry" % "sentry-logback" % Versions.sentryVersion
val catsCore = "org.typelevel" %% "cats-core" % Versions.catsCoreVersion
val pureConfig = "com.github.pureconfig" %% "pureconfig" % Versions.pureConfigVersion
val playJsonExtensions = "ai.x" %% "play-json-extensions" % Versions.playJsonExtensionsVersion
val playSlick = "com.typesafe.play" %% "play-slick" % Versions.playSlickVersion
val slickPg = "com.github.tminglei" %% "slick-pg" % Versions.slickPgVersion
val slickPgPlayJson = "com.github.tminglei" %% "slick-pg_play-json" % Versions.slickPgVersion
val alpakkaSlick = "com.lightbend.akka" %% "akka-stream-alpakka-slick" % Versions.alpakkaVersion
val playMailer = "org.playframework" %% "play-mailer" % Versions.playMailerVersion
val alpakkaS3 = "com.lightbend.akka" %% "akka-stream-alpakka-s3" % Versions.alpakkaVersion
val alpakkaCSV = "com.lightbend.akka" %% "akka-stream-alpakka-csv" % Versions.alpakkaVersion
val alpakkaFile = "com.lightbend.akka" %% "akka-stream-alpakka-file" % Versions.alpakkaVersion
val akkaHttp = "com.typesafe.akka" %% "akka-http" % Versions.akkaHttpVersion
val akkaHttpXml = "com.typesafe.akka" %% "akka-http-xml" % Versions.akkaHttpVersion
val jbcrypt = "org.mindrot" % "jbcrypt" % "0.4"
val enumeratum = "com.beachape" %% "enumeratum" % Versions.enumeratumVersion
val enumeratumPlay = "com.beachape" %% "enumeratum-play" % Versions.enumeratumVersion
val awsJavaSdkS3 = "com.amazonaws" % "aws-java-sdk-s3" % Versions.awsJavaSdkS3Version
val jacksonModuleScala =
"com.fasterxml.jackson.module" %% "jackson-module-scala" % Versions.jacksonModuleScalaVersion
val postgresql = "org.postgresql" % "postgresql" % Versions.postgresqlVersion
Expand All @@ -92,6 +93,7 @@ object Dependencies {
Compile.commonsCompiler,
Compile.logstashLogBackEncoder,
Compile.sttp,
Compile.asyncSttp,
Compile.sttpPlayJson,
Compile.sentry,
Compile.catsCore,
Expand Down
7 changes: 7 additions & 0 deletions test.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

GET https://socialblade.com/youtube/user/carolinereceveur
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
###


GET localhost:9000/api/certified-influencer?name=orang&socialNetwork=Facebook

0 comments on commit f03199f

Please sign in to comment.