chrisasma103 / Related-To-Serverless

GNU General Public License v3.0
0 stars 0 forks source link

Song4u #13

Closed chrisasma103 closed 3 years ago

ghost commented 3 years ago

Week 2 Step 7 ⬤⬤⬤⬤⬤⬤⬤◯ | 🕐 Estimated completion: 15-25 minutes

How old are you??

✅ Task:

Modify your Azure Function so that it determines the user's generation.

Generation Range
GenZ 5 ≤ age ≤ 25
GenY 26 ≤ age ≤ 41
GenX 42 ≤ age ≤ 57
BabyBoomers 58 ≤ age ≤ 76
Unknown Any other age

🚧 Test Your Work

To test your work, try texting a jpg image to your Twilio number (with a face!). After you text the image, you can context.log(age) or context.log(generation) to verify that your program and the FaceAPI is working!

We use context.log and not console.log, because Azure uses the context object in Functions.

❗ Twilio does not allow a simple string to be sent. For example, the following code will NOT send a text back, but will still pass the bot's test, and allow you to move on to the next step.

context.res = {
        body: generation
    };
// THIS CODE WILL NOT RETURN ANYTHING BY TWILIO, but will work on Github!

Downloading image data

Based on the previous step, you should now be able to access your image url. We were able to access it with queryObject.MediaUrl0.

:question: How do I download the image?
Perform a quick GET request with fetch. > :bulb: Remember that you need to initialize variables for your packages! ```js let resp = await fetch(YOUR_URL,{ /*The await expression causes async function execution to pause until a Promise is settled (that is, fulfilled or rejected), and to resume execution of the async function after fulfillment. When resumed, the value of the await expression is that of the fulfilled Promise*/ method: 'GET', }) // receive the response let data = await resp.arrayBuffer() // we are receiving it as a Buffer since this is binary data ```

Analyzing the image

Recall the analyzeImage() function we wrote in the previous project. This time, you will be calling for age data instead of emotion data.

:bulb: Don't forget to read the documentation!

❓ What's the syntax again?
:goal: Retrieve age data from the Face API. ```js async function analyzeImage(img){ const subscriptionKey = process.env['subscriptionkey']; const uriBase = // WHAT'S YOUR ENDPOINT?; // env variables (similar to .gitignore/.env file) to not expose personal info let params = new URLSearchParams({ 'returnFaceId': 'true', 'returnFaceAttributes': //WHAT GOES HERE? }) // making the post request let resp = await fetch(uriBase + '?' + params.toString(),{ method: 'POST', body: img, // img is the parameter inputted headers: { 'Content-Type' : 'application/octet-stream', // HOW DO YOU AUTHENTICATE? } }) // receive the response let data = await resp.json(); return data; } ``` However, this code won't work. Fill in the code where needed **using your previous project and the documentation**.
❓ How do I get an age from my analysis function?
Like you've done before, **call the `analyzeImage()` function with your image you downloaded.** > :bulb: Tip: Always `context.log()` your output so it's easier to determine how to access object attributes. The function returns face data formatted in JSON. We can determine the age like so: ```js let age = result[0].faceAttributes.age ``` This retrieves the **first face**, the `faceAttributes` attribute, and the `age` attribute from the previous object.

Determining and returning Generation

Using the provided names and age ranges, you can use if else logic in Javascript to determine the generation.

:exclamation: Example please!
```js if (age >= 5 && age <= 25) { id = "GenZ" } ``` `id` is the variable we will return as the final generation. `&&` means "and". The age needs to be greater than/equal to 5 AND less than/equal to 20 for the `id = "GenZ` to run.

Remember, Twilio will not allow a simple text like GenZ to go through, so all you have to do is return the generation in the body! We will return more data in the next steps, so you will be able to get a text back.

ghost commented 3 years ago

Week 2 Step 8 ⬤⬤⬤⬤⬤⬤⬤⬤ | 🕐 Estimated completion: 5-10 minutes

Ok, Boomer :neutral_face:

✅ Task:

Modify your Azure Function so that it texts the user back with a song.

🚧 Test Your Work

To test your work, try texting a jpg image to your Twilio number (with a face!). You should receive a text back that contains the required message format.

Example:

Sent from your Twilio trial account - We guessed you're part of this generation: GenZ! Happy listening! https://open.spotify.com/track/0SIAFU49FFHwR3QnT5Jx0k?si=1c12067c9f2b4fbf

Working with JSON

JSON has keys and values. In our case, the generation is the key, and the url is the value.

See if you can determine the url with this syntax:

let value = json_object[key]

Shortcuts with Strings

You might be used to concatenating strings and variables like this:

let string = "Hello " + name

That can get tiring, though. Try this syntax:

let string = `Hello ${name}`
ghost commented 3 years ago

📝 Week 2 Livestream Feedback

Please complete after you've viewed the Week 2 livestream! If you haven't yet watched it but want to move on, just close this issue and come back to it later.

Help us improve BitCamp Serverless - thank you for your feedback! Here are some questions you may want to answer:

:camping: To move on, comment your feedback.

chrisasma103 commented 3 years ago

I thought the livestream was good, but sometimes it could really drag. I wish it would be a little more structured, like: it begins with a lot of talking about the concepts of the week and all this stuff, but after that, it's more focused on getting the work done. It could be a little slow sometimes. Besides that, it was pretty good. The hosts are never boring, just sometimes long-winded.

ghost commented 3 years ago

Providing Feedback

What was confusing about this week? If you could change or add something to this week, what would you do? Your feedback is valued and appreciated!

chrisasma103 commented 3 years ago

I feel like the Github tutorials always seem to be not as detailed as the livestreams, but I figured that this is intentional. I didn't like Step 7 just because you guys said that Twilio wouldn't support the output, so it felt needlessly difficult to debug. I wish you guys would go over debugging during the course using context.log and Azure console instead of me having to be told about it during a work session.

ghost commented 3 years ago

⏰ Time to merge!

Go ahead and merge this branch to main to move on. Great work finishing this section!

merge

⚠️ If you receive a Conflicts error, simply press Resolve conflicts and you should be good to merge!