Merge branch 'master' of https://github.com/jidongxiao/CSCI1200-DataStructures
@@ -300,9 +300,9 @@ You must do this assignment on your own, as described in the [Collaboration Poli
|
|||||||
- Overly cramped. (-1)
|
- Overly cramped. (-1)
|
||||||
- Poor file organization: Puts more than one class in a file (okay for very small helper classes) (-1)
|
- Poor file organization: Puts more than one class in a file (okay for very small helper classes) (-1)
|
||||||
- Poor choice of variable names: non-descriptive names (e.g. 'vec', 'str', 'var'), single-letter variable names (except single loop counter), etc. (-2)
|
- Poor choice of variable names: non-descriptive names (e.g. 'vec', 'str', 'var'), single-letter variable names (except single loop counter), etc. (-2)
|
||||||
- DATA REPRESENTATION (Must create and use homemade linked lists for the implementation.) (7 pts)
|
- DATA REPRESENTATION (Must create and use homemade linked lists for the implementation.) (6 pts)
|
||||||
- No credit (significantly incomplete implementation). (-7)
|
- No credit (significantly incomplete implementation). (-6)
|
||||||
- Uses std::list, or data structures which have not been covered in this class. (-7)
|
- Uses std::list, or data structures which have not been covered in this class. (-6)
|
||||||
- Defines/Uses a list class. (-5)
|
- Defines/Uses a list class. (-5)
|
||||||
- Defines/Uses an iterator class (okay to use iterators to iterate through other containers such as vectors). (-5)
|
- Defines/Uses an iterator class (okay to use iterators to iterate through other containers such as vectors). (-5)
|
||||||
- Does not use homemade linked lists (which consist of a chain of nodes) to store all the users. (-5)
|
- Does not use homemade linked lists (which consist of a chain of nodes) to store all the users. (-5)
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
**Special Note 1: A correct program does not necessarily pass all the test cases for this assignment, as Submitty may let you fail a test case if your program is not fast enough or consumes too much memory.**
|
||||||
|
**Special Note 2: For this assignment, we will not deduct points if you use data structures which have not been learned in this class. However, students who passed all test cases last semester did not use any of such data structures. In other words, using only data structures we have learned so far, is sufficient to pass all test cases.**
|
||||||
|
|
||||||
# Homework 6 — Inverse Word Search Recursion
|
# Homework 6 — Inverse Word Search Recursion
|
||||||
|
|
||||||
In this homework we will build an inverse word search program using the techniques of recursion.
|
In this homework we will build an inverse word search program using the techniques of recursion.
|
||||||
@@ -47,16 +50,16 @@ solution, your program should just output the first legal solution it finds (it
|
|||||||
number of solutions, nor does it need to be the first solution shown in our output). If the puzzle is impossible
|
number of solutions, nor does it need to be the first solution shown in our output). If the puzzle is impossible
|
||||||
your program should output “No solutions found”.
|
your program should output “No solutions found”.
|
||||||
|
|
||||||
To implement this assignment, you must use recursion in your search. First you should tackle the problem
|
**To implement this assignment, you must use recursion in your search.** First you should tackle the problem
|
||||||
of finding and outputting one legal solution to the puzzle (if one exists).
|
of finding and outputting one legal solution to the puzzle (if one exists).
|
||||||
|
|
||||||
## Algorithm Analysis
|
## Algorithm Analysis
|
||||||
|
|
||||||
For larger, more complex examples, this is a really hard problem. Your program should be able to handle
|
For larger, more complex examples, this is a really hard problem. Your program should be able to handle
|
||||||
the small puzzles we have created in a reasonable amount of time. You should make up your own test cases
|
the small puzzles we have created in a reasonable amount of time. <!--You should make up your own test cases
|
||||||
as well to understand this complexity. Include these test cases with your submission (they will be graded).
|
as well to understand this complexity. Include these test cases with your submission (they will be graded).
|
||||||
Summarize the results of your testing, which test cases completed successfully and the approximate “wall
|
Summarize the results of your testing, which test cases completed successfully and the approximate “wall
|
||||||
clock time” for completion of each test. The UNIX/WSL time command can be prepended to your command
|
clock time” for completion of each test.--> The UNIX/WSL time command can be prepended to your command
|
||||||
line to estimate the running time:
|
line to estimate the running time:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
@@ -67,25 +70,26 @@ Once you have finished your implementation and testing, analyze the performance
|
|||||||
order notation. What important variables control the complexity of a particular problem? The width &
|
order notation. What important variables control the complexity of a particular problem? The width &
|
||||||
height of the grid (w and h), the number of required words (r), the number of forbidden words (f), the
|
height of the grid (w and h), the number of required words (r), the number of forbidden words (f), the
|
||||||
number of letters in each word (l), the number of solutions (s)? In your plain text README.txt file, write
|
number of letters in each word (l), the number of solutions (s)? In your plain text README.txt file, write
|
||||||
a concise paragraph (< 200 words) justifying your answer. Also include a simple table summarizing the
|
a concise paragraph (< 200 words) justifying your answer. <!--Also include a simple table summarizing the
|
||||||
running time and number of solutions found by your program on each of the provided examples. Note: It’s
|
running time and number of solutions found by your program on each of the provided examples. Note: It’s
|
||||||
ok if your program can’t solve the biggest puzzles in a reasonable amount of time.
|
ok if your program can’t solve the biggest puzzles in a reasonable amount of time.-->
|
||||||
|
|
||||||
## Program Requirements & Submission Details
|
## Program Requirements & Submission Details
|
||||||
|
|
||||||
Use good coding style when you design and implement your program. Organize your program into functions:
|
Use good coding style when you design and implement your program. Organize your program into functions:
|
||||||
don’t put all the code in main! Be sure to read the [Homework Policies](https://www.cs.rpi.edu/academics/courses/fall23/csci1200/homework_policies.php) as you put the finishing touches on your solution. Be sure to make up new test cases to fully debug your program and don’t forget
|
don’t put all the code in main! Be sure to read the [Homework Policies](https://www.cs.rpi.edu/academics/courses/spring24/csci1200/homework_policies.php) as you put the finishing touches on your solution. Be sure to make up new test cases to fully debug your program and don’t forget
|
||||||
to comment your code! Use the provided template [README.txt](./README.txt) file for notes you want the grader to read.
|
to comment your code! Use the provided template [README.txt](./README.txt) file for notes you want the grader to read.
|
||||||
You must do this assignment on your own, as described in the [Collaboration Policy & Academic Integrity](https://www.cs.rpi.edu/academics/courses/fall23/csci1200/academic_integrity.php) page. If you did discuss the problem or error messages, etc. with anyone, please list their names in your README.txt file.
|
You must do this assignment on your own, as described in the [Collaboration Policy & Academic Integrity](https://www.cs.rpi.edu/academics/courses/spring24/csci1200/academic_integrity.php) page. If you did discuss the problem or error messages, etc. with anyone, please list their names in your README.txt file.
|
||||||
|
|
||||||
**Due Date**: 10/26/2023, Thursday, 23:59pm.
|
**Due Date**: 03/14/2024, Thursday, 10pm.
|
||||||
|
|
||||||
## Rubric
|
## Rubric
|
||||||
|
|
||||||
22 pts
|
20 pts
|
||||||
- README.txt Completed (2 pts)
|
- README.txt Completed (3 pts)
|
||||||
- One of name, collaborators, or hours not filled in. (-1)
|
- One of name, collaborators, or hours not filled in. (-1)
|
||||||
- Two or more of name, collaborators, or hours not filled in. (-2)
|
- Two or more of name, collaborators, or hours not filled in. (-2)
|
||||||
|
- No reflection. (-1)
|
||||||
- LETTER GRID REPRESENTATION (2 pts)
|
- LETTER GRID REPRESENTATION (2 pts)
|
||||||
- Grid is not represented via nested structure vector<vector<char>>, vector<vector<string>>, vector<string>, char\*\*, etc. (-1)
|
- Grid is not represented via nested structure vector<vector<char>>, vector<vector<string>>, vector<string>, char\*\*, etc. (-1)
|
||||||
- Lookup of a position is not O(1), uses something like<list<char>> which has lookup of O(n). (-1)
|
- Lookup of a position is not O(1), uses something like<list<char>> which has lookup of O(n). (-1)
|
||||||
@@ -104,19 +108,19 @@ You must do this assignment on your own, as described in the [Collaboration Poli
|
|||||||
- Did not finish but provides a reasonable analysis with respect to a theoretical implementation and properly justifies it. (-2)
|
- Did not finish but provides a reasonable analysis with respect to a theoretical implementation and properly justifies it. (-2)
|
||||||
- Did not finish but provides a runtime and some small analysis for a theoretical solution. (-4)
|
- Did not finish but provides a runtime and some small analysis for a theoretical solution. (-4)
|
||||||
- Correct order notation for a largely incomplete implementation. (-4)
|
- Correct order notation for a largely incomplete implementation. (-4)
|
||||||
- TESTING SUMMARY & NEW TEST CASES (Included with submission and discussed in README.txt) (3 pts)
|
<!-- - TESTING SUMMARY & NEW TEST CASES (Included with submission and discussed in README.txt) (3 pts)
|
||||||
- Does not provide an adequate description of what the new testcases were in the README. (-2)
|
- Does not provide an adequate description of what the new testcases were in the README. (-2)
|
||||||
- Did not provide running times of the new test cases. (-1)
|
- Did not provide running times of the new test cases. (-1)
|
||||||
- Provides new test case description but implementation/test was missing from the submission. (-1)
|
- Provides new test case description but implementation/test was missing from the submission. (-1)
|
||||||
- Did not provide new test cases or implementation too incomplete for new test cases. (-3)
|
- Did not provide new test cases or implementation too incomplete for new test cases. (-3)-->
|
||||||
- PROGRAM STRUCTURE (6 pts)
|
- PROGRAM STRUCTURE (6 pts)
|
||||||
- Putting almost everything in the main function. It's better to create separate functions for different tasks. (-2)
|
- Putting almost everything in the main function. It's better to create separate functions for different tasks. (-2)
|
||||||
- Function bodies containing more than one statement are placed in the .h file. (okay for templated classes) (-2)
|
- Function bodies containing more than one statement are placed in the .h file. (okay for templated classes) (-2)
|
||||||
- Missing include guards in the .h file. (Or does not declare them correctly) (-1)
|
- Missing include guards in the .h file. (Or does not declare them correctly) (-1)
|
||||||
- Functions are not well documented or are poorly commented, in either the .h or the .cpp file. (-1)
|
- Functions are not well documented or are poorly commented, in either the .h or the .cpp file. (-1)
|
||||||
- Improper uses or omissions of const and reference. (-1)
|
- Improper uses or omissions of const and reference. (-1)
|
||||||
|
- At least one function is excessively long (i.e., more than 200 lines). (-1)
|
||||||
- Overly cramped, excessive whitespace, or poor indentation. (-1)
|
- Overly cramped, excessive whitespace, or poor indentation. (-1)
|
||||||
- Poor file organization: Puts more than one class in a file (okay for very small helper classes) (-1)
|
- Poor file organization: Puts more than one class in a file (okay for very small helper classes) (-1)
|
||||||
- Poor variable names. (-1)
|
- Poor variable names. (-1)
|
||||||
- Use of global variables. (-1)
|
|
||||||
- Contains useless comments like commented-out code, terminal commands, or silly notes. (-1)
|
- Contains useless comments like commented-out code, terminal commands, or silly notes. (-1)
|
||||||
|
|||||||
@@ -23,15 +23,21 @@ What's the order notation of your algorithm?
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
TEST CASE SUMMARY:
|
|
||||||
How did your program perform on the different test cases? Summarize
|
|
||||||
the running times. (It's ok if it didn't finish the harder examples.)
|
|
||||||
What new test cases did you create and how did it perform on those
|
|
||||||
tests?
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MISC. COMMENTS TO GRADER:
|
MISC. COMMENTS TO GRADER:
|
||||||
Optional, please be concise!
|
Optional, please be concise!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Reflection and Self Assessment
|
||||||
|
|
||||||
|
Discuss the issues you encountered during development and testing. What
|
||||||
|
problems did you have? What did you have to research and learn on your
|
||||||
|
own? What kinds of errors did you get? How did you fix them?
|
||||||
|
|
||||||
|
What parts of the assignment did you find challenging? Is there anything that
|
||||||
|
finally "clicked" for you in the process of working on this assignment? How well
|
||||||
|
did the development and testing process go for you?
|
||||||
|
|
||||||
|
< insert reflection >
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
## Clarification
|
<!-- Clarification
|
||||||
|
|
||||||
We made a clarification on the discussion forum. In case you didn't pay attenton there, we are adding the clarification here.
|
We made a clarification on the discussion forum. In case you didn't pay attenton there, we are adding the clarification here.
|
||||||
|
|
||||||
1. when determining which document contains "Tom", we do not consider the word "Tomato" as a match; also, to simplify your task, we do not consider "Tom.", "Tom-", ".Tom", "-Tom", "_Tom", etc., as considering all these cases would make your job much harder. So the word Tom is found only if "Tom" is right before whitespaces and is followed by whitespaces. In other words, the character before "Tom" and the character after "Tom" must be a whitespace character.
|
|
||||||
|
|
||||||
2. However, these are two situations where the above rule does not apply:
|
2. However, these are two situations where the above rule does not apply:
|
||||||
|
|
||||||
2.1. when constructing the snippet, this above rule does not apply. When constructing the snippet, you just find the first occurrence of that word (or that query), and that really is saying that you can just call the **std::string::find**() function to find the first occurrence of that word (or that query) within the body section of the HTML file. And therefore your snippet may be like this:
|
2.1. when constructing the snippet, this above rule does not apply. When constructing the snippet, you just find the first occurrence of that word (or that query), and that really is saying that you can just call the **std::string::find**() function to find the first occurrence of that word (or that query) within the body section of the HTML file. And therefore your snippet may be like this:
|
||||||
@@ -20,7 +18,7 @@ when the search query is a phrase search of "Statue of Liberty". And this means
|
|||||||
|
|
||||||
2.2. when counting the number of occurrences of each keyword (in the keyword density score calculation process), the above rule does not apply. When counting the occurrences of each keyword, you can just call the **std::string::find**() function to find the occurrence of that keyword. And therefore, when the keyword is *Gaga*, and the **std::string::find**() function finds *Gaga* in the sentence of "I am Lady Gaga.", that is okay, we will count this one as a valid occurrence even though there is period "." after *Gaga*.
|
2.2. when counting the number of occurrences of each keyword (in the keyword density score calculation process), the above rule does not apply. When counting the occurrences of each keyword, you can just call the **std::string::find**() function to find the occurrence of that keyword. And therefore, when the keyword is *Gaga*, and the **std::string::find**() function finds *Gaga* in the sentence of "I am Lady Gaga.", that is okay, we will count this one as a valid occurrence even though there is period "." after *Gaga*.
|
||||||
|
|
||||||
So you may see that 1 and 2 are not consistent; but the only reason we allow this inconsistence to exist in this assignment is to simplify your task. A fully functioning search engine will need to handle a lot of complicated cases, and that's way beyond the scope of this course.
|
So you may see that 1 and 2 are not consistent; but the only reason we allow this inconsistence to exist in this assignment is to simplify your task. A fully functioning search engine will need to handle a lot of complicated cases, and that's way beyond the scope of this course.-->
|
||||||
|
|
||||||
# Homework 7 — Design and Implementation of a Simple Google
|
# Homework 7 — Design and Implementation of a Simple Google
|
||||||
|
|
||||||
@@ -61,7 +59,7 @@ Based on the above description, you can see there are 3 steps when implementing
|
|||||||
2. query searching
|
2. query searching
|
||||||
3. page ranking
|
3. page ranking
|
||||||
|
|
||||||
And thus, in this assignment, you are recommended to write your search engine following this same order of 3 steps (the reason this is just a recommendation, rather than a requirement, is because one mentor told us that she can produce all the results in the web crawling stage, and she doesn't need 3 steps). More details about each of these 3 steps are described below:
|
And thus, in this assignment, you are recommended to (but not required to) write your search engine following this same order of 3 steps. More details about each of these 3 steps are described below:
|
||||||
|
|
||||||
### Web Crawling
|
### Web Crawling
|
||||||
|
|
||||||
@@ -92,7 +90,7 @@ A search query may contain one keyword or multiple keywords. Given a set of keyw
|
|||||||
1. Calculate a density score for each keyword within the document.
|
1. Calculate a density score for each keyword within the document.
|
||||||
2. Accumulate these individual density scores into a combined score. <!--represent the overall keyword density of the document for the given set of keywords.-->
|
2. Accumulate these individual density scores into a combined score. <!--represent the overall keyword density of the document for the given set of keywords.-->
|
||||||
|
|
||||||
For each keyword, the keyword's density score is a measure of how the keyword's frequency in a document compares to its occurrence in all documents, and we can use the following formula to calculate the density score of one keyword.
|
For each keyword, the keyword's density score is a measure of how the keyword's frequency in a document compares to its occurrence in all documents, and we can use the following formula to calculate the density score of one keyword. (**Note:** here the term "all documents" literally means all documents, not just the documents which contain the query.)
|
||||||
|
|
||||||
```console
|
```console
|
||||||
Keyword Density Score = (Number of Times Keyword Appears) / (Total Content Length of this One Document * Keyword Density Across All Documents)
|
Keyword Density Score = (Number of Times Keyword Appears) / (Total Content Length of this One Document * Keyword Density Across All Documents)
|
||||||
@@ -131,6 +129,12 @@ Once we get the density score for the keyword *Tom* in the first document (let's
|
|||||||
|
|
||||||
#### Backlinks Score
|
#### Backlinks Score
|
||||||
|
|
||||||
|
There are typically two types of links on the Internet.
|
||||||
|
|
||||||
|
1. **Outgoing Links**: These are links from a particular webpage on your website to other webpages or websites. Outgoing links are also known as "outbound links". They provide navigation from your webpage to other relevant resources on the internet.
|
||||||
|
|
||||||
|
2. **Incoming Backlinks**: These are links from other websites or webpages that direct users to a specific webpage on your website. Incoming backlinks are also commonly referred to as "inbound links" or simply "backlinks". Search engines like Google consider incoming backlinks as an important factor when determining the authority, relevance, and popularity of a webpage. Pages with a higher number of quality backlinks are often perceived as more authoritative and are likely to rank higher in search engine results pages.
|
||||||
|
|
||||||
A backlinks score for a webpage is based on the importance of its incoming backlinks, considering that pages with fewer outgoing links are considered more valuable and contribute more to the score. Let's say there are N web pages which have links pointing to this current page. We name these pages doc_1, doc_2,... to doc_N, and we use doc_i->outgoingLinks to denote how many outgoing links document i has. Then we can calculate the backlinks score of this current page as following:
|
A backlinks score for a webpage is based on the importance of its incoming backlinks, considering that pages with fewer outgoing links are considered more valuable and contribute more to the score. Let's say there are N web pages which have links pointing to this current page. We name these pages doc_1, doc_2,... to doc_N, and we use doc_i->outgoingLinks to denote how many outgoing links document i has. Then we can calculate the backlinks score of this current page as following:
|
||||||
|
|
||||||
|
|
||||||
@@ -144,39 +148,11 @@ Once you have both the keywords density score and the backlinks score, you can t
|
|||||||
|
|
||||||
To reduce the scope of the assignment, and hence reduce the amount of work from you, we make the following rules for this search engine.
|
To reduce the scope of the assignment, and hence reduce the amount of work from you, we make the following rules for this search engine.
|
||||||
|
|
||||||
### Rule 1. Case-sensitive Search Engine
|
### Rule 1. Search HTML Files Only
|
||||||
|
|
||||||
Search engines are usually case-insensitive, but making the search engine case-insensitive will require some extra work and likely need to call some functions we have not learned in this course. Therefore, to simplify your tasks and reduce the amount of your work, in this assignment, the search engine you are going to implement is case-sensitive.
|
Search Engines like Google will search all types of files on the Internet, but in this assignment, we assume all files we search are HTML files.
|
||||||
|
|
||||||
<!--### Words Which are Concatenated
|
### Rule 2. Local Searching Only
|
||||||
|
|
||||||
When searching *Tom Cruise*, your search engine should not include a page which contains *TomCruise*, but does not include "Tom Cruise". Therefore, a search result like the third one here should not be presented in your search results.-->
|
|
||||||
|
|
||||||
### Rule 2. Search HTML Files Only
|
|
||||||
|
|
||||||
Search Engines like Google will search all types of files on the Internet, but in this assignment, we assume all files we search are HTML files. And we consider an HTML file contains the search query only if the search query can be found within the <body> section of the HTML file. The <body> section, enclosed within the <body></body> tags in an HTML document, represents the primary content area of the web page.
|
|
||||||
|
|
||||||
Based on Rule 1 and Rule 2: when the search query is *Tom Cruise*, the second page showed in this image should not be included in your search results, unless the words *Tom Cruise* appears in the other part of the <body></body> section of this web page, which is not displayed here.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
But wait, we see *Tom Cruise* here:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
That's true, but this line is not in the <body> section of the HTML file, it is created via a meta description tag which is in the <head> section of the HTML file. We will have more details on this in [a later section](#the-description) in this README.
|
|
||||||
|
|
||||||
The same thing for this line:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
this line is not in the <body> section of the HTML file, rather, it is created via a title tag which is in the <head> section of the HTML file. More details on this in [a later section](#the-title) in this README.
|
|
||||||
|
|
||||||
### Rule 3. Search Query: No More Than 3 Words
|
|
||||||
|
|
||||||
We also limit the user to search no more than 3 words in each query. Based on this rule, we allow users to search *Tom*, *Tom Cruise*, *Tom and Jerry*, but *Tom Hanks Academy Award* is not allowed, as it contains more than 3 words.
|
|
||||||
|
|
||||||
### Rule 4. Local Searching Only
|
|
||||||
|
|
||||||
The search engine you implement will not search anything on the Internet, as that requires extensive knowledge in computer networks and will need to include network libraries, which is way beyond the scope of this course. In this assignment, we limit our searches to a local folder, which is provided as [html_files](html_files).
|
The search engine you implement will not search anything on the Internet, as that requires extensive knowledge in computer networks and will need to include network libraries, which is way beyond the scope of this course. In this assignment, we limit our searches to a local folder, which is provided as [html_files](html_files).
|
||||||
|
|
||||||
@@ -187,18 +163,26 @@ You are also not allowed to use file system libraries such as <filesystem>
|
|||||||
Your program will be run like this:
|
Your program will be run like this:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
nysearch.exe html_files/index.html output.txt Tom
|
nysearch.exe html_files/index.html input.txt
|
||||||
nysearch.exe html_files/index.html output.txt Tom Cruise
|
|
||||||
nysearch.exe html_files/index.html output.txt Tom and Jerry
|
|
||||||
nysearch.exe html_files/index.html output.txt "Tom Cruise"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Here:
|
Here:
|
||||||
|
|
||||||
- *nysearch.exe* is the executable file name.
|
- *nysearch.exe* is the executable file name.
|
||||||
- html_files/index.html is the Seed URL. While Google maintains a list of Seed URL, in this assignment, we will just use one single HTML file as the Seed page and the path of this file is the Seed URL.
|
- html_files/index.html is the Seed URL. While Google maintains a list of Seed URL, in this assignment, we will just use one single HTML file as the Seed page and the path of this file is the Seed URL.
|
||||||
- output.txt is where to print your output to.
|
- input.txt is the input file which contains search queries. Each line of this file is a search query.
|
||||||
- *Tom* is an example of a search query which contains one word, *Tom Cruise* is an example of a search query which contains two words, *Tom and Jerry* is an example of a search query which contains three words. *"Tom Cruise"* is an example of a phrase search, in which the user wants to find an exact match to this whole phrase.
|
|
||||||
|
Your program should treat each line in the input file as a search query, and print the search results corresponding to each search query into a separate file.
|
||||||
|
Name your output file(s) this way: out1.txt, out2.txt, out3.txt, out4.txt, ...
|
||||||
|
|
||||||
|
Here
|
||||||
|
1. out1.txt contains the search results for the first search query - i.e., the query appears in line 1 of the input file.
|
||||||
|
2. out2.txt contains the search results for the second search query - i.e., the query appears in line 2 of the input file.
|
||||||
|
3. out3.txt contains the search results for the third search query - i.e., the query appears in line 3 of the input file.
|
||||||
|
4. out4.txt contains the search results for the fourth search query - i.e., the query appears in line 4 of the input file.
|
||||||
|
...
|
||||||
|
|
||||||
|
You must name your output files in such a way. You will fail the test cases if your output files are not named as "out1.txt", "out2.txt", "out3.txt", "out4.txt", etc. And yes, if the input file has 1000 lines, then your program will produce 1000 output files.
|
||||||
|
|
||||||
### Phrase Search vs Regular Search
|
### Phrase Search vs Regular Search
|
||||||
|
|
||||||
@@ -206,7 +190,7 @@ Your search engine should support both phrase search and regular search.
|
|||||||
1. When searching multiple words with double quotes, it is called a phrase search. In phrase search, the whole phrase must exist somewhere in the searched document. In other words, the search engine will search for the exact phrase, word for word, and in the specified order.
|
1. When searching multiple words with double quotes, it is called a phrase search. In phrase search, the whole phrase must exist somewhere in the searched document. In other words, the search engine will search for the exact phrase, word for word, and in the specified order.
|
||||||
2. When searching multiple words without double quotes, it is called a regular search. In this assignment, we define the term *regular search* as such: the search engine should look for documents which contain every word of the search query, but these words do not need to appear together, and they can appear in any order within the document.
|
2. When searching multiple words without double quotes, it is called a regular search. In this assignment, we define the term *regular search* as such: the search engine should look for documents which contain every word of the search query, but these words do not need to appear together, and they can appear in any order within the document.
|
||||||
|
|
||||||
Based on the above definition, a document which only contains the following two lines (in the body section of the HTML file) is a valid document when the user searches *Tom Cruise*:
|
Based on the above definition, a document which only contains the following two lines is a valid document when the user performs a regular search looking for *Tom Cruise*:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
Tom and Jerry show
|
Tom and Jerry show
|
||||||
@@ -215,9 +199,35 @@ Have Fun And Save Now With Great Deals When You Cruise With Carnival. Book Onlin
|
|||||||
|
|
||||||
Because we can find both the word *Tom* and the word *Cruise*. But it is not a valid document if the user does a phrase search - *"Tom Cruise"*, as no exact match can be found in this document.
|
Because we can find both the word *Tom* and the word *Cruise*. But it is not a valid document if the user does a phrase search - *"Tom Cruise"*, as no exact match can be found in this document.
|
||||||
|
|
||||||
|
### Definition of Match
|
||||||
|
|
||||||
|
When searching a document, you should follow these rules:
|
||||||
|
|
||||||
|
### Rule 1. Case-sensitive Search Engine
|
||||||
|
|
||||||
|
Search engines are usually case-insensitive, but making the search engine case-insensitive will require some extra work and likely need to call some functions we have not learned in this course. Therefore, to simplify your tasks and reduce the amount of your work, in this assignment, the search engine you are going to implement is case-sensitive. In other words, when searching *Tom*, the word *Tom* is a match, neither the word *TOM* nor the word *tom* is a match.
|
||||||
|
|
||||||
|
### Rule 2. Word Boundary
|
||||||
|
|
||||||
|
When searching the word *Tom*, we do not consider the substring *Tom* in *Tomato* as a match, and we do not consider the substring *Tom* in *4Tom* or *Tom32* as a match; but we do consider the substring *Tom* in *Tom.*, *Tom-*, *.Tom*, *-Tom*, *_Tom*, *Tom!*, " Tom", " Tom ", etc., as a match. In other words, the word *Tom* is found in a document only if it appears as a standalone word, meaning that the character right before *Tom* and the character right after *Tom* must be a word boundary. And in this assignment, you can consider any non-alphanumeric character as a word boundary. This behavior is consistent with what Google does.
|
||||||
|
|
||||||
|
Such a rule also applies to phrase search. We consider a phrase to be a match only if we find the phrase and the character right before the phrase and the character right after the phrase is a word boundary, i.e., a non-alphanumeric character.
|
||||||
|
|
||||||
|
To determine if a character is an alphanumeric character or not, you can call std::isalnum(). This function considers the following characters as alphanumeric:
|
||||||
|
|
||||||
|
```console
|
||||||
|
digits (0123456789)
|
||||||
|
uppercase letters (ABCDEFGHIJKLMNOPQRSTUVWXYZ)
|
||||||
|
lowercase letters (abcdefghijklmnopqrstuvwxyz)
|
||||||
|
```
|
||||||
|
|
||||||
|
The function takes one single character as its sole argument. It return a non-zero value if the character is an alphanumeric character, 0 otherwise.
|
||||||
|
|
||||||
## Input Files
|
## Input Files
|
||||||
|
|
||||||
All the input files are HTML files, and they are provided under the [html_files](html_files) directory. Among these HTML files, there is only one HTML file which will be provided via the command line, and this file will be considered as the Seed file, and the path of this file (i.e. html_files/index.html) therefore will be used as the Seed URL. Your web crawler should search this HTML file and find links contained in this HTML file, and then follow these links to crawl other HTML files, and repeat this process until you can not reach any more files. Keep in mind that links which take you to an HTML file which you have already crawled, should be skipped, otherwise you will get into an infinite loop situation.
|
Your program takes two types of input files: the HTML files and the input.txt file, which contains all the search query terms.
|
||||||
|
|
||||||
|
All the HTML files are provided under the [html_files](html_files) directory. Among these HTML files, there is only one HTML file which will be provided via the command line, and this file will be considered as the Seed file, and the path of this file (i.e. html_files/index.html) therefore will be used as the Seed URL. Your web crawler should search this HTML file and find links contained in this HTML file, and then follow these links to crawl other HTML files, and repeat this process until you can not reach any more files. Keep in mind that links which take you to an HTML file which you have already crawled, should be skipped, otherwise you will get into an infinite loop situation.
|
||||||
|
|
||||||
## Output File Format
|
## Output File Format
|
||||||
|
|
||||||
@@ -271,22 +281,22 @@ In all HTML files we provide, in the <head> section of the HTML, we have a
|
|||||||
<meta name="description" content="Boston Celtics Scores, Stats and Highlights">
|
<meta name="description" content="Boston Celtics Scores, Stats and Highlights">
|
||||||
```
|
```
|
||||||
|
|
||||||
Here, "Boston Celtics Scores, Stats and Highlights" is the description. Keep in mind that this description tag is always in the <head> section, rather than in the <body> section, and thus a match found in the description should not be counted as a valid match.
|
Here, "Boston Celtics Scores, Stats and Highlights" is the description.
|
||||||
|
|
||||||
### The Snippet
|
### The Snippet
|
||||||
|
|
||||||
This snippet contains an excerpt from the page's content that is directly related to the search query. In this assignment, the requirements for this snippet is:
|
This snippet contains an excerpt from the page's content that is directly related to the search query. In this assignment, the requirements for this snippet is:
|
||||||
|
|
||||||
1. It should contain exactly 120 characters.
|
1. when constructing the snippet, you should only consider the <body> section of the HTML files. In other words, the snippet must come from the <body> section only.
|
||||||
|
|
||||||
2.1 For a phrase search, the snippet should start from the beginning of a sentence which contains the query; This means the query itself may not appear in the snippet: this is possible when a sentence contains the query, but that query does not appear in the first 120 characters of the sentence. If the query appears multiple times in a document, consider the first occurrence only. In other words, to construct the snippet, your program should search the first occurrence of the query in the document.
|
2. The snippet should contain exactly 120 characters.
|
||||||
|
|
||||||
2.2 For a regular search, if an exact match can be found in the document, the snippet should start from the beginning of a sentence which contains the query, and if the query appears multiple times in the document, consider the first occurrence only; if an exact match can not be found, the snippet should start from the beginning of a sentence which contains the first keyword of the query, and if the first keyword appears multiple times in the document, consider the first occurrence only.
|
3.1 For a phrase search, the snippet should start from the beginning of a sentence which contains the query; This means the query itself may not appear in the snippet: this is possible when a sentence contains the query, but that query does not appear in the first 120 characters of the sentence. If the query appears multiple times in a document, consider the first occurrence only. In other words, to construct the snippet, your program should search the first occurrence of the query in the <body> section of the document.
|
||||||
|
|
||||||
|
3.2 For a regular search, if an exact match can be found in the <body> section of the document, the snippet should start from the beginning of a sentence which contains the query, and if the query appears multiple times in the <body> section of the document, consider the first occurrence only; if an exact match can not be found in the <body> section of the document, the snippet should start from the beginning of a sentence which contains the first keyword of the query, and if the first keyword appears multiple times in the <body> section of the document, consider the first occurrence only.
|
||||||
|
|
||||||
**Note**, to simplify the construction of the snippets, we have tailored the provided HTML files such that you can identify the beginning of a sentence via searching the period sign before the sentence. In this assignment, you can assume that there is always a period sign before the sentence which contains the snippet you are going to construct, however, it is possible that there are some whitespaces in between the period and the start of the sentence.
|
**Note**, to simplify the construction of the snippets, we have tailored the provided HTML files such that you can identify the beginning of a sentence via searching the period sign before the sentence. In this assignment, you can assume that there is always a period sign before the sentence which contains the snippet you are going to construct, however, it is possible that there are some whitespaces in between the period and the start of the sentence.
|
||||||
|
|
||||||
**Note 2**, when constructing the snippet, you should only consider the <body> section of the HTML files.
|
|
||||||
|
|
||||||
## Useful String Functions
|
## Useful String Functions
|
||||||
|
|
||||||
You may find the following functions to be useful (most of them are string functions, except *std::isspace*):
|
You may find the following functions to be useful (most of them are string functions, except *std::isspace*):
|
||||||
@@ -312,7 +322,8 @@ if (lastSlashPos != std::string::npos) {
|
|||||||
directory = URL.substr(0, lastSlashPos + 1);
|
directory = URL.substr(0, lastSlashPos + 1);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
- erase: when doing a phrase search, we enclose our query with double quotes. Unfortunately, the autograder is not smart enough to handle this, and it will pass the double quotes as a part of the query string. And therefore, in your program, you need to remove the double quotes, and you can do so using code like this:
|
|
||||||
|
<!-- erase: when doing a phrase search, we enclose our query with double quotes. Unfortunately, the autograder is not smart enough to handle this, and it will pass the double quotes as a part of the query string. And therefore, in your program, you need to remove the double quotes, and you can do so using code like this:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
size_t quotePos;
|
size_t quotePos;
|
||||||
@@ -323,6 +334,7 @@ if( (quotePos = tmpString.find('"')) != std::string::npos ){
|
|||||||
```
|
```
|
||||||
|
|
||||||
Here *tmpString* is a string which might contain one double quote character, for example, *tmpString* might be **"Tom**, or it might be **Cruise"**.
|
Here *tmpString* is a string which might contain one double quote character, for example, *tmpString* might be **"Tom**, or it might be **Cruise"**.
|
||||||
|
-->
|
||||||
|
|
||||||
## Provided Functions
|
## Provided Functions
|
||||||
|
|
||||||
@@ -379,32 +391,34 @@ Make sure you still include the fstream library.
|
|||||||
In this assignment, you are required to use either std::map or std::set. You can use both if you want to. You are NOT allowed to use any data structures we have not learned so far, but feel free to use any data structures we have already learned, such as std::string, std::vector, std::list. In addition, **the web crawler component of your program must be recursive**.
|
In this assignment, you are required to use either std::map or std::set. You can use both if you want to. You are NOT allowed to use any data structures we have not learned so far, but feel free to use any data structures we have already learned, such as std::string, std::vector, std::list. In addition, **the web crawler component of your program must be recursive**.
|
||||||
|
|
||||||
Use good coding style when you design and implement your program. Organize your program into functions:
|
Use good coding style when you design and implement your program. Organize your program into functions:
|
||||||
don’t put all the code in main! Be sure to read the [Homework Policies](https://www.cs.rpi.edu/academics/courses/fall23/csci1200/homework_policies.php) as you put the finishing touches on your solution. Be sure to make up new test cases to fully debug your program and don’t forget
|
don’t put all the code in main! Be sure to read the [Homework Policies](https://www.cs.rpi.edu/academics/courses/spring24/csci1200/homework_policies.php) as you put the finishing touches on your solution. Be sure to make up new test cases to fully debug your program and don’t forget
|
||||||
to comment your code! Use the provided template [README.txt](./README.txt) file for notes you want the grader to read.
|
to comment your code! Use the provided template [README.txt](./README.txt) file for notes you want the grader to read.
|
||||||
You must do this assignment on your own, as described in the [Collaboration Policy & Academic Integrity](https://www.cs.rpi.edu/academics/courses/fall23/csci1200/academic_integrity.php) page. If you did discuss the problem or error messages, etc. with anyone, please list their names in your README.txt file.
|
You must do this assignment on your own, as described in the [Collaboration Policy & Academic Integrity](https://www.cs.rpi.edu/academics/courses/spring24/csci1200/academic_integrity.php) page. If you did discuss the problem or error messages, etc. with anyone, please list their names in your README.txt file.
|
||||||
|
|
||||||
**Due Date**: 11/02/2023, Thursday, 23:59pm.
|
**Due Date**: 03/21/2024, Thursday, 10pm.
|
||||||
|
|
||||||
## Instructor's Code
|
## Instructor's Code
|
||||||
|
|
||||||
You can test (but not view) the instructor's code here: [instructor code](http://cs.rpi.edu/~xiaoj8/ds/search/). Note that this page just uses a copy of Google's homepage to serve as the front end, and at the back end it runs the instructor's C++ code. This page does not support the "enter" key, you need to press the "New York Search" button to submit a query.
|
You can test (but not view) the instructor's code here: [instructor code](http://ds.cs.rpi.edu/hws/search/). This page allows you to view those intermediate results.
|
||||||
|
|
||||||
## Rubric
|
## Rubric
|
||||||
|
|
||||||
20 pts
|
21 pts
|
||||||
- README.txt Completed (2 pts)
|
- README.txt Completed (3 pts)
|
||||||
- One of name, collaborators, or hours not filled in. (-1)
|
- One of name, collaborators, or hours not filled in. (-1)
|
||||||
- Two or more of name, collaborators, or hours not filled in. (-2)
|
- Two or more of name, collaborators, or hours not filled in. (-2)
|
||||||
- IMPLEMENTATION AND CODING STYLE (Good class design, split into a .h and .cpp file. Functions > 1 line are in .cpp file. Organized class implementation and reasonable comments throughout. Correct use of const/const& and of class method const. ) (8 pts)
|
- No reflection. (-1)
|
||||||
|
- IMPLEMENTATION AND CODING STYLE (8 pts)
|
||||||
- No credit (significantly incomplete implementation) (-8)
|
- No credit (significantly incomplete implementation) (-8)
|
||||||
- Putting almost everything in the main function. It's better to create separate functions for different tasks. (-2)
|
- Putting almost everything in the main function. It's better to create separate functions for different tasks. (-2)
|
||||||
- Function bodies containing more than one statement are placed in the .h file. (okay for templated classes) (-2)
|
- Function bodies containing more than one statement are placed in the .h file. (okay for templated classes) (-2)
|
||||||
- Missing include guards in the .h file. (Or does not declare them correctly) (-1)
|
- Missing include guards in the .h file. (Or does not declare them correctly) (-1)
|
||||||
- Functions are not well documented or are poorly commented, in either the .h or the .cpp file. (-1)
|
- Functions are not well documented or are poorly commented, in either the .h or the .cpp file. (-1)
|
||||||
- Improper uses or omissions of const and reference. (-1)
|
- Improper uses or omissions of const and reference. (-1)
|
||||||
|
- At least one function is excessively long (i.e., more than 200 lines). (-1)
|
||||||
- Overly cramped, excessive whitespace, or poor indentation. (-1)
|
- Overly cramped, excessive whitespace, or poor indentation. (-1)
|
||||||
- Poor file organization: Puts more than one class in a file (okay for very small helper classes) (-1)
|
- Poor file organization: Puts more than one class in a file (okay for very small helper classes) (-1)
|
||||||
- Poor variable names. (-1)
|
- Poor choice of variable names: non-descriptive names (e.g. 'vec', 'str', 'var'), single-letter variable names (except single loop counter), etc. (-2)
|
||||||
- Contains useless comments like commented-out code, terminal commands, or silly notes. (-1)
|
- Contains useless comments like commented-out code, terminal commands, or silly notes. (-1)
|
||||||
- DATA REPRESENTATION (7 pts)
|
- DATA REPRESENTATION (7 pts)
|
||||||
- Uses data structures which have not been covered in this class. (-7)
|
- Uses data structures which have not been covered in this class. (-7)
|
||||||
@@ -413,3 +427,47 @@ You can test (but not view) the instructor's code here: [instructor code](http:/
|
|||||||
- Member variables are public. (-2)
|
- Member variables are public. (-2)
|
||||||
- RECURSION (3 pts)
|
- RECURSION (3 pts)
|
||||||
- Does not use recursion in the web crawler component. (-3)
|
- Does not use recursion in the web crawler component. (-3)
|
||||||
|
|
||||||
|
## Appendix A - HTML File Basics
|
||||||
|
|
||||||
|
A typical HTML file consists of two main sections: the <head> section and the <body> section.
|
||||||
|
|
||||||
|
1. The <head> section contains metadata about the document, such as its title, character encoding, stylesheets, scripts, and other information that is not directly displayed on the web page.
|
||||||
|
|
||||||
|
2. The <body> section contains the actual content of the document that is displayed to the user, such as text, images, links, and other elements.
|
||||||
|
|
||||||
|
These two sections together define the structure and content of an HTML document. The following is an example, it is a basic html file.
|
||||||
|
|
||||||
|
```html
|
||||||
|
1. <!DOCTYPE html>
|
||||||
|
2. <html lang="en">
|
||||||
|
3. <head>
|
||||||
|
4. <meta charset="UTF-8">
|
||||||
|
5. <meta name="description" content="Example HTML file with head and body sections">
|
||||||
|
6. <meta name="keywords" content="HTML, example, head, body">
|
||||||
|
7. <meta name="author" content="Your Name">
|
||||||
|
8. <title>Example HTML File</title>
|
||||||
|
9. </head>
|
||||||
|
10. <body>
|
||||||
|
11. <h1>Welcome to My Website</h1>
|
||||||
|
12. <p>This is the body content of the HTML file. You can add any content you like here.</p>
|
||||||
|
13. <ul>
|
||||||
|
14. <li><a href="https://example.com">Example Website</a></li>
|
||||||
|
15. <li><a href="https://www.w3schools.com/html/">HTML Tutorial</a></li>
|
||||||
|
16. <li><a href="https://developer.mozilla.org/en-US/docs/Web/HTML">MDN Web Docs: HTML</a></li>
|
||||||
|
17. </ul>
|
||||||
|
18. </body>
|
||||||
|
19. </html>
|
||||||
|
```
|
||||||
|
|
||||||
|
Here:
|
||||||
|
|
||||||
|
- line 3 and line 9 marks the head section of this html file.
|
||||||
|
|
||||||
|
- line 10 and line 18 marks the body section of this html file.
|
||||||
|
|
||||||
|
- line 5 is the description tag.
|
||||||
|
|
||||||
|
- line 8 is the title tag.
|
||||||
|
|
||||||
|
- line 14, line 15, and line 16 are some outgoing links.
|
||||||
|
|||||||
@@ -22,3 +22,16 @@ ESTIMATE OF # OF HOURS SPENT ON THIS ASSIGNMENT: < insert # hours >
|
|||||||
MISC. COMMENTS TO GRADER:
|
MISC. COMMENTS TO GRADER:
|
||||||
(optional, please be concise!)
|
(optional, please be concise!)
|
||||||
|
|
||||||
|
|
||||||
|
## Reflection and Self Assessment
|
||||||
|
|
||||||
|
Discuss the issues you encountered during development and testing. What
|
||||||
|
problems did you have? What did you have to research and learn on your
|
||||||
|
own? What kinds of errors did you get? How did you fix them?
|
||||||
|
|
||||||
|
What parts of the assignment did you find challenging? Is there anything that
|
||||||
|
finally "clicked" for you in the process of working on this assignment? How well
|
||||||
|
did the development and testing process go for you?
|
||||||
|
|
||||||
|
< insert reflection >
|
||||||
|
|
||||||
|
|||||||
60
hws/07_search_engine/input.txt
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
Tom
|
||||||
|
Tom Cruise
|
||||||
|
Tom and Jerry
|
||||||
|
"Tom Brady"
|
||||||
|
Tom Hanks
|
||||||
|
Tomato
|
||||||
|
tomato
|
||||||
|
Statue of Liberty
|
||||||
|
"Statue of Liberty"
|
||||||
|
Pearl Harbor
|
||||||
|
Susan Sarandon
|
||||||
|
Manchester United
|
||||||
|
CNN
|
||||||
|
Boston
|
||||||
|
Boston Celtics
|
||||||
|
"Boston Celtics"
|
||||||
|
Boston University
|
||||||
|
Lady Gaga
|
||||||
|
Maroon 5
|
||||||
|
Los Angeles
|
||||||
|
Facebook
|
||||||
|
LA Lakers
|
||||||
|
Lakers
|
||||||
|
Nicole Kidman
|
||||||
|
Keith Urban
|
||||||
|
Golden State Warriors
|
||||||
|
Splash Brothers
|
||||||
|
Denver Nuggets
|
||||||
|
Nikola Jokic
|
||||||
|
Kobe Bryant Vanessa Bryant
|
||||||
|
Devin Booker Kendall Jenner
|
||||||
|
Keeping up With the Kardashians
|
||||||
|
The Tonight Show Starring Jimmy Fallon
|
||||||
|
Emma Stone
|
||||||
|
Poor Things
|
||||||
|
Everything Everywhere All at Once
|
||||||
|
"Everything Everywhere All at Once"
|
||||||
|
Netflix
|
||||||
|
Academy Awards
|
||||||
|
Grammy Awards
|
||||||
|
James Harden
|
||||||
|
Kawhi Leonard
|
||||||
|
Jude Bellingham
|
||||||
|
Kim Kardashian
|
||||||
|
Chelsea FC
|
||||||
|
Rihanna Stay
|
||||||
|
Rihanna Diamonds
|
||||||
|
Rihanna Umbrella
|
||||||
|
Adele
|
||||||
|
Someone Like You
|
||||||
|
Hometown Glory
|
||||||
|
Prison Break
|
||||||
|
Breaking Bad
|
||||||
|
"Breaking Bad"
|
||||||
|
Anna Gunn
|
||||||
|
Skyler White
|
||||||
|
Bryan Cranston
|
||||||
|
Walter White
|
||||||
|
Aaron Paul
|
||||||
|
Jesse Pinkman
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
Matching documents:
|
|
||||||
|
|
||||||
Title: Boston University
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/subdir9/file25.html
|
|
||||||
Description: Boston University: Homepage
|
|
||||||
Snippet: Let us help you plan your vacation or meeting and discover everything Boston MA has to offer. Boston University is a lea
|
|
||||||
|
|
||||||
Title: Facebook
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/subdir9/subdir10/file28.html
|
|
||||||
Description: Boston University
|
|
||||||
Snippet: Boston University, Boston, Massachusetts. 387601 likes · 5379 talking about this. Welcome to Boston University. Boston
|
|
||||||
|
|
||||||
Title: Bleacher Report
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/file17.html
|
|
||||||
Description: Boston Celtics - NBA
|
|
||||||
Snippet: What Boston cares about right now: Get breaking updates on news, sports, and weather. Local alerts, things to do, and mo
|
|
||||||
|
|
||||||
Title: Boston.com
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/subdir9/file24.html
|
|
||||||
Description: Boston.com: Local breaking news, sports, weather, and things ...
|
|
||||||
Snippet: News: Stay up to date with Boston.com coverage of News. Sports: Patriots - Red Sox - Celtics - Bruins - New England Revo
|
|
||||||
|
|
||||||
Title: Screen Rant
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/file23.html
|
|
||||||
Description: Tom Cruise's Age In Mission Impossible 7 Is A Shocking ...
|
|
||||||
Snippet: Boston Celtics rookie Jordan Walsh is already working toward earning the trust of his teammates weeks ahead of the 2023-
|
|
||||||
|
|
||||||
Title: Sports Illustrated
|
|
||||||
URL: html_files/subdir1/file3.html
|
|
||||||
Description: Celtics Hire Former Knicks Coach - Sports Illustrated
|
|
||||||
Snippet: In Jeff Van Gundy, the Boston Celtics added a consultant with 11 years of experience as an NBA head coach. Former New Yo
|
|
||||||
|
|
||||||
Title: The New York Times
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/subdir9/subdir10/file27.html
|
|
||||||
Description: My Impossible Mission to Find Tom Cruise
|
|
||||||
Snippet: The Boston Celtics and Dallas Mavericks G League affiliates have made a trade. Pinson's G League rights were traded (on
|
|
||||||
|
|
||||||
Title: ESPN
|
|
||||||
URL: html_files/subdir1/subdir2/file4.html
|
|
||||||
Description: Boston Celtics 2023-24 NBA Roster
|
|
||||||
Snippet: Boston Celtics Roster 2023-24 More NBA Teams Team Roster NAME POS AGE HT WT COLLEGE SALARY https://a.espncdn.com/i/heads
|
|
||||||
|
|
||||||
Title: Expedia
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/file20.html
|
|
||||||
Description: Top Hotels in Troy, NY from $55
|
|
||||||
Snippet: The Boston Celtics are a National Basketball Association team that plays in the Eastern Conference. The Celtics have won
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
Matching documents:
|
|
||||||
|
|
||||||
Title: Facebook
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/subdir9/subdir10/file28.html
|
|
||||||
Description: Boston University
|
|
||||||
Snippet: Boston University, Boston, Massachusetts. 387601 likes · 5379 talking about this. Welcome to Boston University. Boston
|
|
||||||
|
|
||||||
Title: Bleacher Report
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/file17.html
|
|
||||||
Description: Boston Celtics - NBA
|
|
||||||
Snippet: What Sam Cassell and Charles Lee Bring to the Boston Celtics Myles Turner Bojan Bogdanovic Bogdan Bogdanovic Nick Richar
|
|
||||||
|
|
||||||
Title: Boston.com
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/subdir9/file24.html
|
|
||||||
Description: Boston.com: Local breaking news, sports, weather, and things ...
|
|
||||||
Snippet: News: Stay up to date with Boston.com coverage of News. Sports: Patriots - Red Sox - Celtics - Bruins - New England Revo
|
|
||||||
|
|
||||||
Title: Sports Illustrated
|
|
||||||
URL: html_files/subdir1/file3.html
|
|
||||||
Description: Celtics Hire Former Knicks Coach - Sports Illustrated
|
|
||||||
Snippet: In Jeff Van Gundy, the Boston Celtics added a consultant with 11 years of experience as an NBA head coach. Former New Yo
|
|
||||||
|
|
||||||
Title: Screen Rant
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/file23.html
|
|
||||||
Description: Tom Cruise's Age In Mission Impossible 7 Is A Shocking ...
|
|
||||||
Snippet: Boston Celtics rookie Jordan Walsh is already working toward earning the trust of his teammates weeks ahead of the 2023-
|
|
||||||
|
|
||||||
Title: The New York Times
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/subdir9/subdir10/file27.html
|
|
||||||
Description: My Impossible Mission to Find Tom Cruise
|
|
||||||
Snippet: The Boston Celtics and Dallas Mavericks G League affiliates have made a trade. Pinson's G League rights were traded (on
|
|
||||||
|
|
||||||
Title: Expedia
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/file20.html
|
|
||||||
Description: Top Hotels in Troy, NY from $55
|
|
||||||
Snippet: The Boston Celtics are a National Basketball Association team that plays in the Eastern Conference. The Celtics have won
|
|
||||||
|
|
||||||
Title: ESPN
|
|
||||||
URL: html_files/subdir1/subdir2/file4.html
|
|
||||||
Description: Boston Celtics 2023-24 NBA Roster
|
|
||||||
Snippet: Boston Celtics Roster 2023-24 More NBA Teams Team Roster NAME POS AGE HT WT COLLEGE SALARY https://a.espncdn.com/i/heads
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
Matching documents:
|
|
||||||
|
|
||||||
Title: Bleacher Report
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/file17.html
|
|
||||||
Description: Boston Celtics - NBA
|
|
||||||
Snippet: What Sam Cassell and Charles Lee Bring to the Boston Celtics Myles Turner Bojan Bogdanovic Bogdan Bogdanovic Nick Richar
|
|
||||||
|
|
||||||
Title: Sports Illustrated
|
|
||||||
URL: html_files/subdir1/file3.html
|
|
||||||
Description: Celtics Hire Former Knicks Coach - Sports Illustrated
|
|
||||||
Snippet: In Jeff Van Gundy, the Boston Celtics added a consultant with 11 years of experience as an NBA head coach. Former New Yo
|
|
||||||
|
|
||||||
Title: Screen Rant
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/file23.html
|
|
||||||
Description: Tom Cruise's Age In Mission Impossible 7 Is A Shocking ...
|
|
||||||
Snippet: Boston Celtics rookie Jordan Walsh is already working toward earning the trust of his teammates weeks ahead of the 2023-
|
|
||||||
|
|
||||||
Title: The New York Times
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/subdir9/subdir10/file27.html
|
|
||||||
Description: My Impossible Mission to Find Tom Cruise
|
|
||||||
Snippet: The Boston Celtics and Dallas Mavericks G League affiliates have made a trade. Pinson's G League rights were traded (on
|
|
||||||
|
|
||||||
Title: Expedia
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/file20.html
|
|
||||||
Description: Top Hotels in Troy, NY from $55
|
|
||||||
Snippet: The Boston Celtics are a National Basketball Association team that plays in the Eastern Conference. The Celtics have won
|
|
||||||
|
|
||||||
Title: ESPN
|
|
||||||
URL: html_files/subdir1/subdir2/file4.html
|
|
||||||
Description: Boston Celtics 2023-24 NBA Roster
|
|
||||||
Snippet: Boston Celtics Roster 2023-24 More NBA Teams Team Roster NAME POS AGE HT WT COLLEGE SALARY https://a.espncdn.com/i/heads
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
Matching documents:
|
|
||||||
|
|
||||||
Title: StatueOfLibertyTickets.com
|
|
||||||
URL: html_files/subdir1/subdir2/file6.html
|
|
||||||
Description: Statue of Liberty Tickets, Ellis Island Tickets, Statue of Liberty...
|
|
||||||
Snippet: Visit the Statue of Liberty National Monument and Ellis Island Immigration Museum. Ferry
|
|
||||||
service to both Liberty and Ell
|
|
||||||
|
|
||||||
Title: Ellis Island Foundation
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir4/file13.html
|
|
||||||
Description: Liberty 135 | Statue of Liberty & Ellis Island
|
|
||||||
Snippet: Since 1982, The Statue of Liberty-Ellis Island Foundation has partnered with the
|
|
||||||
National Park Service to care for one
|
|
||||||
|
|
||||||
Title: National Geographic Kids
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/file18.html
|
|
||||||
Description: Statue of Liberty
|
|
||||||
Snippet: On July 4, 1884 France presented the United States with an incredible birthday gift: the
|
|
||||||
Statue of Liberty! Without its
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
Matching documents:
|
|
||||||
|
|
||||||
Title: StatueOfLibertyTickets.com
|
|
||||||
URL: html_files/subdir1/subdir2/file6.html
|
|
||||||
Description: Statue of Liberty Tickets, Ellis Island Tickets, Statue of Liberty...
|
|
||||||
Snippet: Visit the Statue of Liberty National Monument and Ellis Island Immigration Museum. Ferry
|
|
||||||
service to both Liberty and Ell
|
|
||||||
|
|
||||||
Title: Ellis Island Foundation
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir4/file13.html
|
|
||||||
Description: Liberty 135 | Statue of Liberty & Ellis Island
|
|
||||||
Snippet: Since 1982, The Statue of Liberty-Ellis Island Foundation has partnered with the
|
|
||||||
National Park Service to care for one
|
|
||||||
|
|
||||||
Title: National Geographic Kids
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/file18.html
|
|
||||||
Description: Statue of Liberty
|
|
||||||
Snippet: On July 4, 1884 France presented the United States with an incredible birthday gift: the
|
|
||||||
Statue of Liberty! Without its
|
|
||||||
|
|
||||||
Title: Instagram
|
|
||||||
URL: html_files/subdir1/subdir2/file5.html
|
|
||||||
Description: Lady Gaga (@ladygaga) • Instagram photos and videos
|
|
||||||
Snippet: Lil Eddie - Statue Tribute to all my supporters who shared my song made cover videos, and more! I appreciate and love ev
|
|
||||||
|
|
||||||
Title: Sports Illustrated
|
|
||||||
URL: html_files/subdir1/file3.html
|
|
||||||
Description: Celtics Hire Former Knicks Coach - Sports Illustrated
|
|
||||||
Snippet: Find any Statue for sale - Perfect for your project, from life size to small table top sculptures.
|
|
||||||
The Statue, the story
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
Matching documents:
|
|
||||||
|
|
||||||
Title: Wikipedia
|
|
||||||
URL: html_files/file2.html
|
|
||||||
Description: Tom and Jerry
|
|
||||||
Snippet: For the titular characters, see Tom Cat and Jerry Mouse. Tom and Jerry is an American animated media franchise and serie
|
|
||||||
|
|
||||||
Title: Amazon
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/file10.html
|
|
||||||
Description: Watch Tom and Jerry: The Complete First Volume - Amazon
|
|
||||||
Snippet: In this decades-old rivalry, Tom Cat and Jerry Mouse match wits against each other in numerous situations and settings.
|
|
||||||
|
|
||||||
Title: Wikipedia
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/file16.html
|
|
||||||
Description: Tom Cruise - Wikipedia
|
|
||||||
Snippet: Thomas Cruise Mapother IV (born July 3, 1962), known professionally as Tom Cruise, is an American actor. One of the worl
|
|
||||||
|
|
||||||
Title: CBS Sports
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/file9.html
|
|
||||||
Description: Tom Brady on coming out of retirement again: 'I wouldn't be...
|
|
||||||
Snippet: Tom Brady Tom Brady on coming out of retirement again: 'I wouldn't be around by tonight'. Brady joked that he isn't goin
|
|
||||||
|
|
||||||
Title: Screen Rant
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/file23.html
|
|
||||||
Description: Tom Cruise's Age In Mission Impossible 7 Is A Shocking ...
|
|
||||||
Snippet: Mission: Impossible - Dead Reckoning Part One is another showcase for Tom Cruise's incredible action movie star qualitie
|
|
||||||
|
|
||||||
Title: Warner Bros.
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/file8.html
|
|
||||||
Description: Tom & Jerry | Movies
|
|
||||||
Snippet: “Tom and Jerry” is one of the leading franchises in the Warner Bros. One of the most beloved rivalries in history is
|
|
||||||
|
|
||||||
Title: The Kennedy Center
|
|
||||||
URL: html_files/subdir1/subdir2/file7.html
|
|
||||||
Description: Tom Hanks Biography
|
|
||||||
Snippet: When Reader's Digest did a poll in 2013 to find out who are the 100 Most Trusted People in America, Tom Hanks came out a
|
|
||||||
|
|
||||||
Title: Bleacher Report
|
|
||||||
URL: html_files/file1.html
|
|
||||||
Description: Tom Brady - Tampa Bay Buccaneers Quarterback
|
|
||||||
Snippet: The New York Jets did not make a call to Tom Brady after Aaron Rodgers was lost for the season to a torn Achilles, sourc
|
|
||||||
|
|
||||||
Title: The New York Times
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/subdir9/subdir10/file27.html
|
|
||||||
Description: My Impossible Mission to Find Tom Cruise
|
|
||||||
Snippet: In an interview with Playboy in 2012, Tom Cruise described Katie Holmes as “an extraordinary person” with a “wonde
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
Matching documents:
|
|
||||||
|
|
||||||
Title: Wikipedia
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/file16.html
|
|
||||||
Description: Tom Cruise - Wikipedia
|
|
||||||
Snippet: Thomas Cruise Mapother IV (born July 3, 1962), known professionally as Tom Cruise, is an American actor. One of the worl
|
|
||||||
|
|
||||||
Title: Screen Rant
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/file23.html
|
|
||||||
Description: Tom Cruise's Age In Mission Impossible 7 Is A Shocking ...
|
|
||||||
Snippet: Mission: Impossible - Dead Reckoning Part One is another showcase for Tom Cruise's incredible action movie star qualitie
|
|
||||||
|
|
||||||
Title: The Kennedy Center
|
|
||||||
URL: html_files/subdir1/subdir2/file7.html
|
|
||||||
Description: Tom Hanks Biography
|
|
||||||
Snippet: When Reader's Digest did a poll in 2013 to find out who are the 100 Most Trusted People in America, Tom Hanks came out a
|
|
||||||
|
|
||||||
Title: Amazon
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/file10.html
|
|
||||||
Description: Watch Tom and Jerry: The Complete First Volume - Amazon
|
|
||||||
Snippet: In this decades-old rivalry, Tom Cat and Jerry Mouse match wits against each other in numerous situations and settings.
|
|
||||||
|
|
||||||
Title: CBS Sports
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/file9.html
|
|
||||||
Description: Tom Brady on coming out of retirement again: 'I wouldn't be...
|
|
||||||
Snippet: Tom Cruise, Despite appearing in a whole range of movies from romance to dramas, there's one genre that Tom Cruise domin
|
|
||||||
|
|
||||||
Title: The New York Times
|
|
||||||
URL: html_files/subdir1/subdir2/subdir3/subdir5/subdir6/subdir7/subdir8/subdir9/subdir10/file27.html
|
|
||||||
Description: My Impossible Mission to Find Tom Cruise
|
|
||||||
Snippet: In an interview with Playboy in 2012, Tom Cruise described Katie Holmes as “an extraordinary person” with a “wonde
|
|
||||||
|
|
||||||
Title: Bleacher Report
|
|
||||||
URL: html_files/file1.html
|
|
||||||
Description: Tom Brady - Tampa Bay Buccaneers Quarterback
|
|
||||||
Snippet: The New York Jets did not make a call to Tom Brady after Aaron Rodgers was lost for the season to a torn Achilles, sourc
|
|
||||||
13
hws/discussions/inverse_word_search.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
In-class discussion (This discussion only focus on the basic logic of the program; optimization is not the scope of this discussion)
|
||||||
|
|
||||||
|
Discuss the following questions with students around you.
|
||||||
|
|
||||||
|
1. What data structure is good to represent one solution? What data structure is good to represent all solutions?
|
||||||
|
2. Do we need to initialize the board(s)?
|
||||||
|
3. What shall we do in the main function?
|
||||||
|
|
||||||
|
4. Do we need to track where exactly (in the board) a word is inserted?
|
||||||
|
5. Do we need to track if one location is occupied or not?
|
||||||
|
6. Do we need to track if a location is shared by multiple words or not?
|
||||||
|
|
||||||
|
7. Is the word search program we have discussed before relevant to this assignment? Can we use some of the logic from that program?
|
||||||
@@ -32,11 +32,31 @@ Linked List of NodeA nodes: 1 -> 2 -> 3 -> 4 -> 5 -> nullptr
|
|||||||
Linked List of NodeB nodes: 1 -> 1.41421 -> 1.73205 -> 2 -> 2.23607 -> nullptr
|
Linked List of NodeB nodes: 1 -> 1.41421 -> 1.73205 -> 2 -> 2.23607 -> nullptr
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**: Hardcoding the PrintList() function to just print the above two messages is strictly prohibited. Students doing that will be evicted from the lab room. Also, your functions must be templated functions.
|
**Note**: Hardcoding the PrintList() function to just print the above two messages is strictly prohibited. Also, your functions must be templated functions.
|
||||||
|
|
||||||
**To complete this checkpoint**, show a TA the implementation and the output of your program.
|
**To complete this checkpoint**, show a TA the implementation and the output of your program.
|
||||||
|
|
||||||
## Checkpoint 3: Debugging a Merge Sort program.
|
## Checkpoint 3: Merge Two Lists.
|
||||||
|
*estimate: 30-40 minutes*
|
||||||
|
|
||||||
|
Given two doubly-linked lists: linked list A and linked list B, and both linked lists are sorted. Data in linked list A is sorted in an ascending order. Data in linked list B is also sorted in an ascending order. Merge these two lists such that data in the merged list is still sorted in an ascending order.
|
||||||
|
|
||||||
|
More specifically, complete the mergeLists() function in [checkpoint3.cpp](checkpoint3.cpp), such that the program prints the following output.
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ g++ checkpoint3.cpp
|
||||||
|
$ ./a.out
|
||||||
|
1 3 5 7 9
|
||||||
|
2 4 6 8 10
|
||||||
|
1 2 3 4 5 6 7 8 9 10
|
||||||
|
10 9 8 7 6 5 4 3 2 1
|
||||||
|
```
|
||||||
|
|
||||||
|
**To complete this checkpoint**, explain to a TA your implementation and show the output of your program.
|
||||||
|
|
||||||
|
<!--TODO: how about memory leaks?-->
|
||||||
|
|
||||||
|
<!--## Checkpoint 3: Debugging a Merge Sort program.
|
||||||
*estimate: 30-40 minutes*
|
*estimate: 30-40 minutes*
|
||||||
|
|
||||||
We expect our program [checkpoint3.cpp](checkpoint3.cpp) to produce the following results when it is compiled and run.
|
We expect our program [checkpoint3.cpp](checkpoint3.cpp) to produce the following results when it is compiled and run.
|
||||||
@@ -54,4 +74,4 @@ Sorted Vector: 2 3 4 7 8
|
|||||||
|
|
||||||
But this program currently does not behave as expected. Troubleshoot this program, find the problems and fix them. You can use a debugger.
|
But this program currently does not behave as expected. Troubleshoot this program, find the problems and fix them. You can use a debugger.
|
||||||
|
|
||||||
**To complete this checkpoint**, explain to a TA the bugs you found, show a TA your fixes and run the program to show that your fixes are correct and the program now produces the expected results.
|
**To complete this checkpoint**, explain to a TA the bugs you found, show a TA your fixes and run the program to show that your fixes are correct and the program now produces the expected results.-->
|
||||||
|
|||||||
@@ -1,107 +1,94 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
// prototype of the sorting function
|
template <class T>
|
||||||
std::vector<int> sortVector(std::vector<int>& nums);
|
class Node {
|
||||||
|
public:
|
||||||
|
T value;
|
||||||
|
Node<T>* next;
|
||||||
|
Node<T>* prev;
|
||||||
|
|
||||||
// function to print the elements of a vector
|
// constructor
|
||||||
void printVector(const std::vector<int>& nums) {
|
Node(T val) : value(val), next(nullptr), prev(nullptr) {}
|
||||||
for (int num : nums) {
|
};
|
||||||
std::cout << num << " ";
|
|
||||||
}
|
// function to merge two sorted doubly linked lists
|
||||||
std::cout << std::endl;
|
// this function returns a pointer pointing to the head node of the merged list.
|
||||||
|
template <class T>
|
||||||
|
Node<T>* mergeLists(Node<T>* head_A, Node<T>* head_B) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
// test case 1
|
// create 5 nodes and link them to form a linked list, this is linked list A.
|
||||||
std::vector<int> test1 = {5, 2, 9, 1, 5, 6};
|
Node<int>* head_A = new Node<int>(1);
|
||||||
std::vector<int> result1 = sortVector(test1);
|
Node<int>* second_A = new Node<int>(3);
|
||||||
std::cout << "Test Case 1: Original Vector: ";
|
Node<int>* third_A = new Node<int>(5);
|
||||||
printVector(test1);
|
Node<int>* fourth_A = new Node<int>(7);
|
||||||
std::cout << "Sorted Vector: ";
|
Node<int>* fifth_A = new Node<int>(9);
|
||||||
printVector(result1);
|
|
||||||
|
// link the nodes
|
||||||
|
head_A->next = second_A;
|
||||||
|
second_A->prev = head_A;
|
||||||
|
second_A->next = third_A;
|
||||||
|
third_A->prev = second_A;
|
||||||
|
third_A->next = fourth_A;
|
||||||
|
fourth_A->prev = third_A;
|
||||||
|
fourth_A->next = fifth_A;
|
||||||
|
fifth_A->prev = fourth_A;
|
||||||
|
|
||||||
|
// traverse linked list A and print the values
|
||||||
|
Node<int>* current = head_A;
|
||||||
|
while (current != nullptr) {
|
||||||
|
std::cout << current->value << " ";
|
||||||
|
current = current->next;
|
||||||
|
}
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
// test case 2
|
// create 5 nodes and link them to form a linked list, this is linked list B.
|
||||||
std::vector<int> test2 = {3, 8, 2, 7, 4};
|
Node<int>* head_B = new Node<int>(2);
|
||||||
std::vector<int> result2 = sortVector(test2);
|
Node<int>* second_B = new Node<int>(4);
|
||||||
std::cout << "Test Case 2: Original Vector: ";
|
Node<int>* third_B = new Node<int>(6);
|
||||||
printVector(test2);
|
Node<int>* fourth_B = new Node<int>(8);
|
||||||
std::cout << "Sorted Vector: ";
|
Node<int>* fifth_B = new Node<int>(10);
|
||||||
printVector(result2);
|
|
||||||
|
// link the nodes
|
||||||
|
head_B->next = second_B;
|
||||||
|
second_B->prev = head_B;
|
||||||
|
second_B->next = third_B;
|
||||||
|
third_B->prev = second_B;
|
||||||
|
third_B->next = fourth_B;
|
||||||
|
fourth_B->prev = third_B;
|
||||||
|
fourth_B->next = fifth_B;
|
||||||
|
fifth_B->prev = fourth_B;
|
||||||
|
|
||||||
|
// traverse linked list B and print the values
|
||||||
|
current = head_B;
|
||||||
|
while (current != nullptr) {
|
||||||
|
std::cout << current->value << " ";
|
||||||
|
current = current->next;
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
Node<int>* head_C;
|
||||||
|
Node<int>* tail_C;
|
||||||
|
head_C = mergeLists(head_A, head_B);
|
||||||
|
|
||||||
|
// traverse linked list C and print the values
|
||||||
|
current = head_C;
|
||||||
|
while (current != nullptr) {
|
||||||
|
std::cout << current->value << " ";
|
||||||
|
// keep tracking current and when current reaches nullptr, tail_C will be the tail node.
|
||||||
|
tail_C = current;
|
||||||
|
current = current->next;
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
// traverse linked list C backwards and print the values
|
||||||
|
current = tail_C;
|
||||||
|
while (current != nullptr) {
|
||||||
|
std::cout << current->value << " ";
|
||||||
|
current = current->prev;
|
||||||
|
}
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// merge two vectors which are already sorted
|
|
||||||
std::vector<int>& mergeVectors(std::vector<int>& v1, std::vector<int>& v2){
|
|
||||||
int size1 = v1.size();
|
|
||||||
int size2 = v2.size();
|
|
||||||
std::vector<int> v(size1+size2, 0);
|
|
||||||
int index1 = 0;
|
|
||||||
int index2 = 0;
|
|
||||||
int index = 0;
|
|
||||||
// traverse v1 and v2 at the same time
|
|
||||||
while(index1<size1 && index2<size2){
|
|
||||||
// whoever is smaller goes to v
|
|
||||||
if(v1[index1]<v2[index2]){
|
|
||||||
v[index] = v1[index1];
|
|
||||||
index1 = index1 + 1;
|
|
||||||
}else{
|
|
||||||
v[index] = v2[index2];
|
|
||||||
index2 = index2 + 1;
|
|
||||||
}
|
|
||||||
index = index + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if v1 is done, let's now deal with v2 left overs
|
|
||||||
if(index1>=size1){
|
|
||||||
while(index2<size2){
|
|
||||||
v[index] = v2[index2];
|
|
||||||
index++;
|
|
||||||
index2++;
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
// else means v2 is done. let's now deal with v1 left overs
|
|
||||||
while(index1<size1){
|
|
||||||
v[index] = v1[index1];
|
|
||||||
index++;
|
|
||||||
index1++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
// sort a vecotr of integers
|
|
||||||
std::vector<int> sortVector(std::vector<int>& nums) {
|
|
||||||
int size = nums.size();
|
|
||||||
// base case
|
|
||||||
if(size==1){
|
|
||||||
return nums;
|
|
||||||
}
|
|
||||||
// general case
|
|
||||||
// split the vector into two halves.
|
|
||||||
int mid = size/2;
|
|
||||||
|
|
||||||
// nums1 to store the first half, and nums2 to store the second half.
|
|
||||||
std::vector<int> nums1;
|
|
||||||
std::vector<int> nums2;
|
|
||||||
|
|
||||||
// copy the first half
|
|
||||||
for(int i=0;i<mid;i++){
|
|
||||||
nums1[i]=nums[i];
|
|
||||||
}
|
|
||||||
// copy the second half
|
|
||||||
for(int i=mid;i<size;i++){
|
|
||||||
nums2[i]=nums[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
// make the recursive calls
|
|
||||||
nums1 = sortVector(nums1);
|
|
||||||
nums2 = sortVector(nums2);
|
|
||||||
|
|
||||||
// now that the two vectors are already sorted, let's merge them
|
|
||||||
return mergeVectors(nums1, nums2);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
# Announcements
|
# Lecture 13 --- Operators & Friends
|
||||||
|
|
||||||
# Lecture 14 --- Operators & Friends
|
|
||||||
|
|
||||||
- Operators as non-member functions, as member functions, and as friend functions.
|
- Operators as non-member functions, as member functions, and as friend functions.
|
||||||
|
|
||||||
## 14.1 Complex Numbers — A Brief Review
|
## 13.1 Complex Numbers — A Brief Review
|
||||||
|
|
||||||
- Complex numbers take the form z = a + bi, where i = √−1 and a and b are real. a is called the real part, b is called the imaginary part.
|
- Complex numbers take the form z = a + bi, where i = √−1 and a and b are real. a is called the real part, b is called the imaginary part.
|
||||||
- If w = c + di, then
|
- If w = c + di, then
|
||||||
@@ -13,7 +11,7 @@
|
|||||||
– w × z = (ac − bd) + (ad + bc)i
|
– w × z = (ac − bd) + (ad + bc)i
|
||||||
- The magnitude of a complex number is √a<sup>2</sup> + b<sup>2</sup>;
|
- The magnitude of a complex number is √a<sup>2</sup> + b<sup>2</sup>;
|
||||||
|
|
||||||
## 14.2 Complex Class declaration ([complex.h](complex.h))
|
## 13.2 Complex Class declaration ([complex.h](complex.h))
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
class Complex {
|
class Complex {
|
||||||
@@ -36,7 +34,7 @@ Complex operator- (Complex const& left, Complex const& right); // non-member fun
|
|||||||
ostream& operator<< (ostream& ostr, Complex const& c); // non-member function
|
ostream& operator<< (ostream& ostr, Complex const& c); // non-member function
|
||||||
```
|
```
|
||||||
|
|
||||||
## 14.3 Implementation of Complex Class ([complex.cpp](complex.cpp))
|
## 13.3 Implementation of Complex Class ([complex.cpp](complex.cpp))
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
// Assignment operator
|
// Assignment operator
|
||||||
@@ -72,7 +70,7 @@ ostream& operator<< (ostream & ostr, Complex const& c) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 14.4 Operators as Non-Member Functions and as Member Functions
|
## 13.4 Operators as Non-Member Functions and as Member Functions
|
||||||
|
|
||||||
- We have already written our own operators, especially **operator<**, to sort objects stored in STL containers.
|
- We have already written our own operators, especially **operator<**, to sort objects stored in STL containers.
|
||||||
- We can write them as non-member functions (e.g., **operator-**). When implemented as a non-member function,
|
- We can write them as non-member functions (e.g., **operator-**). When implemented as a non-member function,
|
||||||
@@ -91,7 +89,7 @@ Observe that the function has **only on**e argument!
|
|||||||
objects. Calling constructors for **Complex** objects inside functions, especially member functions that work on
|
objects. Calling constructors for **Complex** objects inside functions, especially member functions that work on
|
||||||
**Complex** objects, seems somewhat counter-intuitive at first, but it is common practice!
|
**Complex** objects, seems somewhat counter-intuitive at first, but it is common practice!
|
||||||
|
|
||||||
## 14.5 Assignment Operators
|
## 13.5 Assignment Operators
|
||||||
|
|
||||||
- The assignment operator: **z1 = z2**; becomes a function call: **z1.operator=(z2)**;
|
- The assignment operator: **z1 = z2**; becomes a function call: **z1.operator=(z2)**;
|
||||||
And cascaded assignments like: **z1 = z2 = z3**; are really: **z1 = (z2 = z3)**;
|
And cascaded assignments like: **z1 = z2 = z3**; are really: **z1 = (z2 = z3)**;
|
||||||
@@ -100,11 +98,11 @@ Studying these helps to explain how to write the assignment operator, which is u
|
|||||||
- The argument (the right side of the operator) is passed by constant reference. Its values are used to change
|
- The argument (the right side of the operator) is passed by constant reference. Its values are used to change
|
||||||
the contents of the left side of the operator, which is the object whose member function is called. A reference
|
the contents of the left side of the operator, which is the object whose member function is called. A reference
|
||||||
to this object is returned, allowing a subsequent call to **operator= (z1’s operator=** in the example above).
|
to this object is returned, allowing a subsequent call to **operator= (z1’s operator=** in the example above).
|
||||||
The identifier this is reserved as a pointer inside class scope to the object whose member function is called.
|
The identifier **this** is reserved as a pointer inside class scope to the object whose member function is called.
|
||||||
Therefore, ***this** is a a reference to this object.
|
Therefore, ***this** is a a reference to this object.
|
||||||
- The fact that **operator=** returns a reference allows us to write code of the form: **(z1 = z2).real();**
|
- The fact that **operator=** returns a reference allows us to write code of the form: **(z1 = z2).real();**
|
||||||
|
|
||||||
## 14.6 Exercise
|
## 13.6 Exercise
|
||||||
|
|
||||||
Write an operator+= as a member function of the Complex class. To do so, you must combine what you learned
|
Write an operator+= as a member function of the Complex class. To do so, you must combine what you learned
|
||||||
about operator= and operator+. In particular, the new operator must return a reference, *this.
|
about operator= and operator+. In particular, the new operator must return a reference, *this.
|
||||||
@@ -112,10 +110,9 @@ about operator= and operator+. In particular, the new operator must return a ref
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 14.7 Returning Objects vs. Returning References to Objects
|
## 13.7 Returning Objects vs. Returning References to Objects
|
||||||
|
|
||||||
- In the operator+ and operator- functions we create new Complex objects and simply return the new object.
|
- In the operator+ and operator- functions we create new Complex objects and simply return the new object. The return types of these operators are both Complex.
|
||||||
The return types of these operators are both Complex.
|
|
||||||
Technically, we don’t return the new object (which is stored only locally and will disappear once the scope of
|
Technically, we don’t return the new object (which is stored only locally and will disappear once the scope of
|
||||||
the function is exited). Instead we create a copy of the object and return the copy. This automatic copying
|
the function is exited). Instead we create a copy of the object and return the copy. This automatic copying
|
||||||
happens outside of the scope of the function, so it is safe to access outside of the function. Note: It’s important
|
happens outside of the scope of the function, so it is safe to access outside of the function. Note: It’s important
|
||||||
@@ -128,7 +125,7 @@ This avoids creation of a new object.
|
|||||||
created object! This results in someone having a pointer to stale memory. The pointer may behave correctly
|
created object! This results in someone having a pointer to stale memory. The pointer may behave correctly
|
||||||
for a short while... until the memory under the pointer is allocated and used by someone else.
|
for a short while... until the memory under the pointer is allocated and used by someone else.
|
||||||
|
|
||||||
## 14.8 Friend Classes vs. Friend Functions
|
## 13.8 Friend Classes vs. Friend Functions
|
||||||
|
|
||||||
- In the example below, the Foo class has designated the Bar to be a friend. This must be done in the public
|
- In the example below, the Foo class has designated the Bar to be a friend. This must be done in the public
|
||||||
area of the declaration of Foo.
|
area of the declaration of Foo.
|
||||||
@@ -146,25 +143,34 @@ contents) rather than Bar claiming it. What could go wrong if we allowed friends
|
|||||||
grants these functions access similar to that of a member function. The most common example of this is
|
grants these functions access similar to that of a member function. The most common example of this is
|
||||||
operators, and especially stream operators.
|
operators, and especially stream operators.
|
||||||
|
|
||||||
## 14.9 Stream Operators as Friend Functions
|
## 13.9 Stream Operators as Friend Functions
|
||||||
|
|
||||||
- The operators >> and << are defined for the Complex class. These are binary operators.
|
- The operators >> and << are defined for the Complex class. These are binary operators.
|
||||||
The compiler translates: cout << z3 into: operator<< (cout, z3)
|
The compiler translates: cout << z3 into: operator<< (cout, z3)
|
||||||
Consecutive calls to the << operator, such as: cout << "z3 = " << z3 << endl;
|
- Consecutive calls to the << operator, such as: cout << "z3 = " << z3 << endl;
|
||||||
are translated into: ((cout << "z3 = ") << z3) << endl;
|
are translated into: ((cout << "z3 = ") << z3) << endl;
|
||||||
Each application of the operator returns an ostream object so that the next application can occur.
|
- Each application of the operator returns an ostream object so that the next application can occur.
|
||||||
- If we wanted to make one of these stream operators a regular member function, it would have to be a member
|
- If we wanted to make one of these stream operators a regular member function, it would have to be a member
|
||||||
function of the ostream class because this is the first argument (left operand). We cannot make it a member
|
function of the ostream class because this is the first argument (left operand). We cannot make it a member
|
||||||
function of the Complex class. This is why stream operators are never member functions.
|
function of the Complex class. This is why stream operators are never member functions.
|
||||||
- Stream operators are either ordinary non-member functions (if the operators can do their work through the
|
- Stream operators are either ordinary non-member functions (if the operators can do their work through the
|
||||||
public class interface) or friend functions (if they need non public access).
|
public class interface) or friend functions (if they need non public access).
|
||||||
|
|
||||||
## 14.10 Summary of Operator Overloading in C++
|
You can compile and run these three examples, in which the output stream operators are overloaded as a non-member function, a friend function, and a member function.
|
||||||
|
|
||||||
- Unary operators that can be overloaded: + - * & ~ ! ++ -- -> ->*
|
- [Example 1 - overloading as a non member function](overloading_non_member.cpp)
|
||||||
- Binary operators that can be overloaded: + - * / % ^ & | << >> += -= *= /= %= ^=
|
- [Example 2 - overloading as a friend function](overloading_friend.cpp)
|
||||||
&= |= <<= >>= < <= > >= == != && || , [] () new new[] delete delete[]
|
- [Example 3 - overloading as a member function](overloading_member.cpp) - pay attention to the main function, does it surprise you?
|
||||||
- There are only a few operators that can not be overloaded: . .* ?: ::
|
|
||||||
|
## 13.10 Summary of Operator Overloading in C++
|
||||||
|
|
||||||
|
- Unary operators that can be overloaded: + - \* & ~ ! ++ -- -> ->\*
|
||||||
|
- Binary operators that can be overloaded: + - \* / % ^ & | << >> += -= \*= /= %= ^= &= |= <<= >>= < <= > >= == != && || , [] () new new[] delete delete[]
|
||||||
|
- There are only a few operators that can not be overloaded:
|
||||||
|
- . (the . operator)
|
||||||
|
- .\* (what is this?)
|
||||||
|
- ?: (the ternary operator)
|
||||||
|
- :: (the scope resolution operator)
|
||||||
- We can’t create new operators and we can’t change the number of arguments (except for the function call
|
- We can’t create new operators and we can’t change the number of arguments (except for the function call
|
||||||
operator, which has a variable number of arguments).
|
operator, which has a variable number of arguments).
|
||||||
- There are three different ways to overload an operator. When there is a choice, we recommend trying to write
|
- There are three different ways to overload an operator. When there is a choice, we recommend trying to write
|
||||||
@@ -176,9 +182,9 @@ operators in this order:
|
|||||||
meaning of an operator. The whole point of operators is lost if you do. One (bad) example would be
|
meaning of an operator. The whole point of operators is lost if you do. One (bad) example would be
|
||||||
defining the increment operator on a Complex number.
|
defining the increment operator on a Complex number.
|
||||||
|
|
||||||
## 14.11 Extra Practice
|
## 13.11 Extra Practice
|
||||||
|
|
||||||
- Implement the following operators for the Complex class (or explain why they cannot or should not be
|
- Implement the following operators for the Complex class (or explain why they cannot or should not be
|
||||||
implemented). Think about whether they should be non-member, member, or friend.
|
implemented). Think about whether they should be non-member, member, or friend.
|
||||||
|
|
||||||
operator* operator== operator!= operator<
|
operator\* operator== operator!= operator<
|
||||||
32
lectures/13_operators/overloading_friend.cpp
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
// Overloading the output stream operator as a friend function.
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
class MyClass {
|
||||||
|
private:
|
||||||
|
int value;
|
||||||
|
|
||||||
|
public:
|
||||||
|
MyClass(int val) : value(val) {}
|
||||||
|
friend std::ostream& operator<<(std::ostream& os, const MyClass& obj);
|
||||||
|
|
||||||
|
// getter function to access private member
|
||||||
|
int getValue() const {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// overload the output stream operator as a non-member function
|
||||||
|
std::ostream& operator<<(std::ostream& os, const MyClass& obj) {
|
||||||
|
os << "Value: " << obj.value;
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
MyClass obj(42);
|
||||||
|
|
||||||
|
// output the object using the overloaded operator
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
32
lectures/13_operators/overloading_member.cpp
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
// Overloading the output stream operator as a member function.
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
class MyClass {
|
||||||
|
private:
|
||||||
|
int value;
|
||||||
|
|
||||||
|
public:
|
||||||
|
MyClass(int val) : value(val) {}
|
||||||
|
|
||||||
|
// getter function to access private member
|
||||||
|
int getValue() const {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// overload the output stream operator as a non-member function
|
||||||
|
std::ostream& operator<<(std::ostream& os) {
|
||||||
|
os << "Value: " << value;
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
MyClass obj(42);
|
||||||
|
|
||||||
|
// output the object using the overloaded operator
|
||||||
|
obj << std::cout << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
31
lectures/13_operators/overloading_non_member.cpp
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// Overloading the output stream operator as a non-member function.
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
class MyClass {
|
||||||
|
private:
|
||||||
|
int value;
|
||||||
|
|
||||||
|
public:
|
||||||
|
MyClass(int val) : value(val) {}
|
||||||
|
|
||||||
|
// getter function to access private member
|
||||||
|
int getValue() const {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// overload the output stream operator as a non-member function
|
||||||
|
std::ostream& operator<<(std::ostream& os, const MyClass& obj) {
|
||||||
|
os << "Value: " << obj.getValue();
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
MyClass obj(42);
|
||||||
|
|
||||||
|
// output the object using the overloaded operator
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
282
lectures/14_stacks_queues/README.md
Normal file
@@ -0,0 +1,282 @@
|
|||||||
|
# Lecture 14 --- Stack and Queue
|
||||||
|
|
||||||
|
## Test 2 Information
|
||||||
|
|
||||||
|
- Test 2 will be held Thursday, February 29th, 2024 from 6-7:50pm.
|
||||||
|
- No make-ups will be given except for pre-approved absence or illness, and a written excuse from the Dean of Students or the Student Experience office or the RPI Health Center will be required.
|
||||||
|
- If you have a letter from Disability Services for Students and you have not already emailed it to ds_instructors@cs.rpi.edu, please do so ASAP. Shianne Hulbert will be in contact with you about your accommodations for the test. And you will go to Lally 102 for the test.
|
||||||
|
- Student’s assigned test room, row, and seat assignments will be re-randomized. If you don’t have a seating assignment when you log onto Submitty, let us know via the ds_instructors list.
|
||||||
|
- Coverage: Lectures 1-14, Labs 1-7, HW 1-5.
|
||||||
|
- OPTIONAL: you are allowed to bring two physical pieces of 8.5x11” paper, that’s four “sides”. We will check at the start of the exam that you do not have more than two pieces of paper for your notes!
|
||||||
|
- All students must bring their Rensselaer photo ID card.
|
||||||
|
- Bring pencil(s) & eraser (pens are ok, but not recommended).
|
||||||
|
- Computers, cell-phones, smart watches, calculators, music players, etc. are not permitted.
|
||||||
|
- Practice problems from previous tests are available on the [course materials](https://submitty.cs.rpi.edu/courses/s24/csci1200/course_materials) page on Submitty.
|
||||||
|
|
||||||
|
## Other Announcements
|
||||||
|
|
||||||
|
- Resources will be dedicated to test grading and thus no office hours on Friday in test weeks. (week of test 1, week of test 2, week of test 3)
|
||||||
|
- Jidong's new office hours (effective after the spring break): Monday 2-4pm, Wednesday 1-3pm.
|
||||||
|
- HW6 will be ready on Thursday night 10pm. Only 10 students passed all test cases last semester. Not just because it's hard, it's just that submitty will stop your program if it runs too long. In order to pass some of the tricky test cases, your program must be fast enough.
|
||||||
|
|
||||||
|
## Today’s Lecture
|
||||||
|
|
||||||
|
- Function Objects
|
||||||
|
- STL Queue and STL Stack
|
||||||
|
|
||||||
|
## 14.0 Some Special Syntax
|
||||||
|
|
||||||
|
The following program demonstrates some special syntax about C++ constructors.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
// custom class definition
|
||||||
|
class MyClass {
|
||||||
|
public:
|
||||||
|
// constructor
|
||||||
|
MyClass() {
|
||||||
|
std::cout << "Constructor called" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// destructor
|
||||||
|
~MyClass() {
|
||||||
|
std::cout << "Destructor called" << std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
MyClass();
|
||||||
|
|
||||||
|
MyClass A;
|
||||||
|
MyClass B;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
What is the output of this program?
|
||||||
|
|
||||||
|
You can compile and run the [program](constructor.cpp).
|
||||||
|
|
||||||
|
## 14.1 Function Objects, a.k.a. Functors
|
||||||
|
|
||||||
|
- In addition to the basic mathematical operators + - * / < > , another operator we can overload for our C++
|
||||||
|
classes is the function call operator.
|
||||||
|
Why do we want to do this? This allows instances or objects of our class, to be used like functions. It’s weird
|
||||||
|
but powerful.
|
||||||
|
- Here’s the basic syntax. Any specific number of arguments can be used.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class my_class_name {
|
||||||
|
public:
|
||||||
|
// ... normal class stuff ...
|
||||||
|
my_return_type operator() ( /* my list of args */ );
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
- Compile and run this simple functor [example](functor.cpp).
|
||||||
|
|
||||||
|
## 14.2 Why are Functors Useful?
|
||||||
|
|
||||||
|
- One example is the default 3rd argument for std::sort. We know that by default STL’s sort routines will use
|
||||||
|
the less than comparison function for the type stored inside the container. How exactly do they do that?
|
||||||
|
- First let’s define another tiny helper function:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
bool float_less(float x, float y) {
|
||||||
|
return x < y;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- And then let's define a vector called *my_data*:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
std::vector<float> my_data = {1.1, 2.2, 3.3, 4.4, 5.5};
|
||||||
|
```
|
||||||
|
|
||||||
|
- Remember how we can sort the *my_data* vector defined above using our own homemade comparison function for sorting:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
std::sort(my_data.begin(),my_data.end(),float_less);
|
||||||
|
```
|
||||||
|
|
||||||
|
If we don't specify a 3rd argument:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
std::sort(my_data.begin(),my_data.end());
|
||||||
|
```
|
||||||
|
|
||||||
|
This is what STL does by default:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
std::sort(my_data.begin(),my_data.end(),std::less<float>());
|
||||||
|
```
|
||||||
|
|
||||||
|
- What is std::less? It’s a templated class. Above we have called the default constructor to make an instance
|
||||||
|
of that class. Then, that instance/object can be used like it’s a function. Weird!
|
||||||
|
|
||||||
|
- How does it do that? std::less is a teeny tiny class that just contains the overloaded function call operator.
|
||||||
|
|
||||||
|
```
|
||||||
|
template <class T>
|
||||||
|
class less {
|
||||||
|
public:
|
||||||
|
bool operator() (const T& x, const T& y) const {
|
||||||
|
return x < y;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
- You can use this instance/object/functor as a function that expects exactly two arguments of type T (in this
|
||||||
|
example float) that returns a bool. That’s exactly what we need for std::sort! This ultimately does the
|
||||||
|
same thing as our tiny helper homemade compare function!
|
||||||
|
|
||||||
|
## 14.3 Another Functor Example
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
// functor class
|
||||||
|
class MultiplyBy {
|
||||||
|
private:
|
||||||
|
int factor;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// constructor
|
||||||
|
MultiplyBy(int factor) : factor(factor) {}
|
||||||
|
|
||||||
|
// overloaded function call operator
|
||||||
|
int operator()(int x) const {
|
||||||
|
return x * factor;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
// create an instance of the functor
|
||||||
|
MultiplyBy multiplyByTwo(2);
|
||||||
|
|
||||||
|
// use the functor as a function
|
||||||
|
// surprising: the object itself can be used like it's a function.
|
||||||
|
std::cout << "Result of multiplying 5 by 2: " << multiplyByTwo(5) << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- You can compile and run this [example](multiply.cpp).
|
||||||
|
|
||||||
|
## 14.4 Additional STL Container Classes: Stacks
|
||||||
|
|
||||||
|
<!--We’ve studied STL vectors, lists, maps, and sets. These data structures provide a wide range of flexibility in
|
||||||
|
terms of operations. One way to obtain computational efficiency is to consider a simplified set of operations or
|
||||||
|
functionality.-->
|
||||||
|
<!-- For example, with a hash table we give up the notion of a sorted table and gain in find, insert, & erase efficiency.-->
|
||||||
|
|
||||||
|
- A stack is a linear data structure that follows the Last-In-First-Out (LIFO) principle.
|
||||||
|
- Stacks allow access, insertion and deletion from only one end called the top.
|
||||||
|
- There is no access to values in the middle of a stack.
|
||||||
|
- Stacks may be implemented efficiently in terms of vectors and lists, although vectors are preferable.
|
||||||
|
- All stack operations are O(1).
|
||||||
|
|
||||||
|
### 14.4.1 Member functions of std::stack
|
||||||
|
|
||||||
|
- push(const T& value): Adds an element value to the top of the stack.
|
||||||
|
- pop(): Removes the top element from the stack.
|
||||||
|
- top(): Returns a reference to the top element of the stack without removing it.
|
||||||
|
- empty(): Checks if the stack is empty. Returns true if the stack is empty, false otherwise.
|
||||||
|
- size(): Returns the number of elements in the stack.
|
||||||
|
|
||||||
|
### 14.4.2 Stack Example Program
|
||||||
|
|
||||||
|
- Following is an example program, remember to include the stack library.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include <iostream>
|
||||||
|
#include <stack>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::stack<int> myStack;
|
||||||
|
|
||||||
|
myStack.push(10);
|
||||||
|
myStack.push(20);
|
||||||
|
myStack.push(30);
|
||||||
|
myStack.push(40);
|
||||||
|
myStack.push(50);
|
||||||
|
|
||||||
|
std::cout << "Size of stack: " << myStack.size() << std::endl;
|
||||||
|
std::cout << "Top element: " << myStack.top() << std::endl;
|
||||||
|
|
||||||
|
if (!myStack.empty()) {
|
||||||
|
std::cout << "Stack is not empty" << std::endl;
|
||||||
|
} else {
|
||||||
|
std::cout << "Stack is empty" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
myStack.pop();
|
||||||
|
// What is the output of this next line?
|
||||||
|
std::cout << "Top element after pop: " << myStack.top() << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can compile and run this above [program](stack.cpp).
|
||||||
|
|
||||||
|
## 14.5 Additional STL Container Classes: Queues
|
||||||
|
|
||||||
|
- A queue is a linear data structure that follows the First-In-First-Out (FIFO) principle.
|
||||||
|
- Queues allow insertion at one end, called the back and removal from the other end, called the front.
|
||||||
|
- There is no access to values in the middle of a queue.
|
||||||
|
- Queues may be implemented efficiently in terms of a list. Using vectors for queues is also possible, but requires more work to get right.
|
||||||
|
- All queue operations are O(1).
|
||||||
|
|
||||||
|
### 14.5.1 Member functions of std::queue
|
||||||
|
|
||||||
|
- push(const T& value): Adds an element value to the rear of the queue. This operation is also known as enqueue.
|
||||||
|
- pop(): Removes the front element from the queue. This operation is also known as dequeue.
|
||||||
|
- front(): Returns a reference to the front element of the queue without removing it.
|
||||||
|
- empty(): Checks if the queue is empty. Returns true if the queue is empty, false otherwise.
|
||||||
|
- size(): Returns the number of elements in the queue.
|
||||||
|
|
||||||
|
### 14.5.2 Queue Example Program
|
||||||
|
|
||||||
|
- Following is an example program, remember to include the queue library.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include <iostream>
|
||||||
|
#include <queue>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::queue<int> myQueue;
|
||||||
|
|
||||||
|
myQueue.push(10);
|
||||||
|
myQueue.push(20);
|
||||||
|
myQueue.push(30);
|
||||||
|
myQueue.push(40);
|
||||||
|
myQueue.push(50);
|
||||||
|
|
||||||
|
std::cout << "Size of queue: " << myQueue.size() << std::endl;
|
||||||
|
std::cout << "Front element: " << myQueue.front() << std::endl;
|
||||||
|
|
||||||
|
if (!myQueue.empty()) {
|
||||||
|
std::cout << "Queue is not empty" << std::endl;
|
||||||
|
} else {
|
||||||
|
std::cout << "Queue is empty" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
myQueue.pop();
|
||||||
|
// What is the output of this next line?
|
||||||
|
std::cout << "Front element after pop: " << myQueue.front() << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can compile and run this above [program](queue.cpp).
|
||||||
|
|
||||||
|
## 14.6 Leetcode Exercises
|
||||||
|
|
||||||
|
- [Leetcode problem 225: Implement Stack using Queues](https://leetcode.com/problems/implement-stack-using-queues/). Solution: [p225_stack_using_queues.cpp](../../leetcode/p225_stack_using_queues.cpp).
|
||||||
|
- [Leetcode problem 232: Implement Queue using Stacks](https://leetcode.com/problems/implement-queue-using-stacks/). Solution: [p232_queue_using_stacks.cpp](../../leetcode/p232_queue_using_stacks.cpp).
|
||||||
|
- [Leetcode problem 20: Valid Parentheses](https://leetcode.com/problems/valid-parentheses/). Solution: [p20_valid_parentheses.cpp](../../leetcode/p20_valid_parentheses.cpp)
|
||||||
|
- [Leetcode problem 71: Simplify Path](https://leetcode.com/problems/simplify-path/). Solution: [p71_simplify_path.cpp](../../leetcode/p71_simplify_path.cpp)
|
||||||
32
lectures/14_stacks_queues/constructor.cpp
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
// custom class definition
|
||||||
|
class MyClass {
|
||||||
|
public:
|
||||||
|
// constructor
|
||||||
|
MyClass() {
|
||||||
|
std::cout << "Constructor called" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// destructor
|
||||||
|
~MyClass() {
|
||||||
|
std::cout << "Destructor called" << std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
/* creating a temporary object using constructor syntax.
|
||||||
|
It creates a temporary object that gets destructed immediately.
|
||||||
|
Why? Because this line creates a temporary object of type MyClass using the constructor syntax,
|
||||||
|
but it does not associate the temporary object with any variable.
|
||||||
|
This temporary object is constructed and immediately destroyed in the same line of code,
|
||||||
|
as it is not stored in any variable.
|
||||||
|
This is often used when you need to perform a one-time action using a constructor without storing the object for later use.
|
||||||
|
*/
|
||||||
|
MyClass();
|
||||||
|
|
||||||
|
MyClass A;
|
||||||
|
MyClass B;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
17
lectures/14_stacks_queues/functor.cpp
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
class MyFunctor {
|
||||||
|
public:
|
||||||
|
int operator()(int x, int y) {
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
MyFunctor myFunc;
|
||||||
|
int result = myFunc(3, 4); // This calls the overloaded () operator.
|
||||||
|
// result now holds the value 7.
|
||||||
|
std::cout << "result is " << result << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
27
lectures/14_stacks_queues/multiply.cpp
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
// functor class
|
||||||
|
class MultiplyBy {
|
||||||
|
private:
|
||||||
|
int factor;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// constructor
|
||||||
|
MultiplyBy(int factor) : factor(factor) {}
|
||||||
|
|
||||||
|
// overloaded function call operator
|
||||||
|
int operator()(int x) const {
|
||||||
|
return x * factor;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
// create an instance of the functor
|
||||||
|
MultiplyBy multiplyByTwo(2);
|
||||||
|
|
||||||
|
// use the functor as a function
|
||||||
|
// surprising: the object itself can be used like it's a function.
|
||||||
|
std::cout << "Result of multiplying 5 by 2: " << multiplyByTwo(5) << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
26
lectures/14_stacks_queues/queue.cpp
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <queue>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::queue<int> myQueue;
|
||||||
|
|
||||||
|
myQueue.push(10);
|
||||||
|
myQueue.push(20);
|
||||||
|
myQueue.push(30);
|
||||||
|
myQueue.push(40);
|
||||||
|
myQueue.push(50);
|
||||||
|
|
||||||
|
std::cout << "Size of queue: " << myQueue.size() << std::endl;
|
||||||
|
std::cout << "Front element: " << myQueue.front() << std::endl;
|
||||||
|
|
||||||
|
if (!myQueue.empty()) {
|
||||||
|
std::cout << "Queue is not empty" << std::endl;
|
||||||
|
} else {
|
||||||
|
std::cout << "Queue is empty" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
myQueue.pop();
|
||||||
|
std::cout << "Front element after pop: " << myQueue.front() << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
26
lectures/14_stacks_queues/stack.cpp
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <stack>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::stack<int> myStack;
|
||||||
|
|
||||||
|
myStack.push(10);
|
||||||
|
myStack.push(20);
|
||||||
|
myStack.push(30);
|
||||||
|
myStack.push(40);
|
||||||
|
myStack.push(50);
|
||||||
|
|
||||||
|
std::cout << "Size of stack: " << myStack.size() << std::endl;
|
||||||
|
std::cout << "Top element: " << myStack.top() << std::endl;
|
||||||
|
|
||||||
|
if (!myStack.empty()) {
|
||||||
|
std::cout << "Stack is not empty" << std::endl;
|
||||||
|
} else {
|
||||||
|
std::cout << "Stack is empty" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
myStack.pop();
|
||||||
|
std::cout << "Top element after pop: " << myStack.top() << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -69,8 +69,7 @@ changed. It can only be erased (together with the associated value).
|
|||||||
|
|
||||||
The mechanics of using std::pairs are relatively straightforward:
|
The mechanics of using std::pairs are relatively straightforward:
|
||||||
- std::pairs are a templated struct with just two members, called first and second. Reminder: a struct
|
- std::pairs are a templated struct with just two members, called first and second. Reminder: a struct
|
||||||
is basically a wimpy class and in this course you aren’t allowed to create new structs. You should use classes
|
is basically a wimpy class.
|
||||||
instead.
|
|
||||||
- To work with pairs, you must #include <utility>. Note that the header file for maps (#include <map>)
|
- To work with pairs, you must #include <utility>. Note that the header file for maps (#include <map>)
|
||||||
itself includes utility, so you don’t have to include utility explicitly when you use pairs with maps.
|
itself includes utility, so you don’t have to include utility explicitly when you use pairs with maps.
|
||||||
- Here are simple examples of manipulating pairs:
|
- Here are simple examples of manipulating pairs:
|
||||||
@@ -87,7 +86,7 @@ p3.second = -1.5;
|
|||||||
// p3.first = std::string("illegal"); // (a)
|
// p3.first = std::string("illegal"); // (a)
|
||||||
// p1 = p3; // (b)
|
// p1 = p3; // (b)
|
||||||
```
|
```
|
||||||
- The function std::make pair creates a pair object from the given values. It is really just a simplified
|
- The function std::make_pair creates a pair object from the given values. It is really just a simplified
|
||||||
constructor, and as the example shows there are other ways of constructing pairs.
|
constructor, and as the example shows there are other ways of constructing pairs.
|
||||||
- Most of the statements in the above code show accessing and changing values in pairs.
|
- Most of the statements in the above code show accessing and changing values in pairs.
|
||||||
The two statements at the end are commented out because they cause syntax errors:
|
The two statements at the end are commented out because they cause syntax errors:
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 665 KiB After Width: | Height: | Size: 665 KiB |
|
Before Width: | Height: | Size: 374 KiB After Width: | Height: | Size: 374 KiB |
|
Before Width: | Height: | Size: 334 KiB After Width: | Height: | Size: 334 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 587 KiB After Width: | Height: | Size: 587 KiB |
25
old_hws/09_tiktok_trends/tmp.txt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{"id": "6994518428988067077", "text": "NEW YORK MOTHERS BE LIKE \ud83d\ude2d\ud83d\ude2d #Fyp #newyorkcity #zaza", "createTime": 1628538229, "createTimeISO": "2021-08-09T19:43:49.000Z", "authorMeta": {"id": "6809480500286571526", "name": "thcbillybleu", "nickName": "Billy BLEU", "verified": false, "signature": "IG : @THCBILLYB \nYOUTUBE LINK IN BIO \u25b6\ufe0f\nBILLY BLEU \ud83d\udc99", "bioLink": null, "avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/de95636e9dc08e19fe5cf34b47320d60~c5_720x720.jpeg?x-expires=1700452800&x-signature=zeJDYc%2Fwh1THRek7QTTBm0anYB4%3D", "privateAccount": false, "following": 573, "fans": 201400, "heart": 1500000, "video": 93, "digg": 2695}, "musicMeta": {"musicName": "original sound", "musicAuthor": "Billy BLEU", "musicOriginal": true, "playUrl": "https://v16m.tiktokcdn-us.com/36aac4355416d6bdbaa441c7012efebf/6558931c/video/tos/useast5/tos-useast5-v-27dcd7-tx/ca6db909d5bd42319487806385419062/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TE6KYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=ZTw3aDxpPGk5aDlkZDQ4ZUBpajs3azs6ZnhyNzMzNzU8M0AxNC0uMTYtNS4xYDIvL2AxYSNvXmJvcjQwXjVgLS1kMTZzcw%3D%3D&l=202311180432476D8FA14D7089D0330A3B&btag=e00010000&download=true", "coverMediumUrl": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/de95636e9dc08e19fe5cf34b47320d60~c5_720x720.jpeg?x-expires=1700452800&x-signature=zeJDYc%2Fwh1THRek7QTTBm0anYB4%3D", "musicId": "6994518308267494150"}, "webVideoUrl": "https://www.tiktok.com/@thcbillybleu/video/6994518428988067077", "videoMeta": {"height": 1024, "width": 576, "duration": 77, "coverUrl": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/e1cb2cfb7dfe493a85262591eb523518_1628538231?x-expires=1700452800&x-signature=p2Zaxk4aDD7DSsOq0KYZcmfT48U%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c002-tx/8095cbe14a2148c28742304c0335201d/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=1728&bt=864&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8Zmoz1IKQ_vjRqjsAhLrus&mime_type=video_mp4&qs=0&rc=ODs3NWRmaTRmOmlmOjM0aEBpM3FpcWc6ZnJyNzMzNzczM0A1M2AwMy5iX2MxLzE0LWMxYSNsXzNxcjRvNjVgLS1kMTZzcw%3D%3D&btag=e00010000&expire=1700454844&l=202311180432476D8FA14D7089D0330A3B&ply_type=2&policy=2&signature=e1d1895fb27b607214509a586772d447&tk=tt_chain_token"}, "diggCount": 726200, "shareCount": 15600, "playCount": 3800000, "commentCount": 3920, "mentions": []}
|
||||||
|
{"id": "7122564127511350574", "text": "I can\u2019t believe Ricky made it all the way to the top of the Empire State Building! #newyorkcity #nyc #empirestatebuilding #nickiminaj", "createTime": 1658351192, "createTimeISO": "2022-07-20T21:06:32.000Z", "authorMeta": {"id": "6676571141835883526", "name": "empirestatebldg", "nickName": "Empire State Building", "verified": true, "signature": "Rated #1 in the US by Tripadvisor Travelers in 2022 & 2023\nText CONNECT to 27416", "bioLink": null, "avatar": "https://p19-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/7a4eda26f8c97454f58099c1a4dbf163~c5_720x720.jpeg?x-expires=1700452800&x-signature=Sm9%2Bp4lMdCY86tNsLWr1fnAFfLU%3D", "privateAccount": false, "following": 876, "fans": 1000000, "heart": 45600000, "video": 1151, "digg": 2034}, "musicMeta": {"musicName": "nickiminaj", "musicAuthor": "Ben", "musicOriginal": true, "playUrl": "https://v16m.tiktokcdn-us.com/6acbaeb430c21a5dbf271ed080667408/65589349/video/tos/useast2a/tos-useast2a-v-27dcd7/b0b03c599cea42cabf9516bad02a6dbc/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&cs=0&ft=t5PLr-Inz7TzCKYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=M2U0ZDw2O2Q8NWc0NTc4Z0BpMzxnOXI6OGlpdDMzMzU8M0BhL2A1Y19iNjQxYTE1MV8wYSNsLzYtLmQwbjNfLS0xMTZzcw%3D%3D&l=2023111804343713A6A89D8E706E322D89&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/04aecf1015eb5722945a3ed39ebe77b3~c5_720x720.jpeg?x-expires=1700452800&x-signature=bpOwBZ8vYPc00Vyd88PCRfuaPDI%3D", "musicId": "6813086342415682309"}, "webVideoUrl": "https://www.tiktok.com/@empirestatebldg/video/7122564127511350574", "videoMeta": {"height": 1024, "width": 576, "duration": 10, "coverUrl": "https://p16-sign.tiktokcdn-us.com/obj/tos-useast5-p-0068-tx/548e42d220874a24b594ad17363c572b_1658351193?x-expires=1700452800&x-signature=bSIDSYTzgrU6ZrPhtvLriMj4Hvw%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-pve-0068-tx/b9336dcb3b594891bee30e80084c5e24/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=3660&bt=1830&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoZtIKQ_vj9WbsAhLrus&mime_type=video_mp4&qs=0&rc=Zmc3ZTRpMzk5N2dpPDszNUBpanR1NGg6Zjo5ZTMzZzczNEA1MWMuMTJhNTExYl8uNTJgYSNoaTU2cjRnbGBgLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454887&l=2023111804343713A6A89D8E706E322D89&ply_type=2&policy=2&signature=887ef3e6243b083376b5faf318d7bf08&tk=tt_chain_token"}, "diggCount": 293000, "shareCount": 1340, "playCount": 1900000, "commentCount": 1241, "mentions": []}
|
||||||
|
{"id": "7205680821959757102", "text": "Replying to @brockentoaster Eating foods that cost the same amount as the TIME \u23f0 #challenge #spending #eatwithme #nycfood #newyorkcity #mukbang #dayofeating ", "createTime": 1677703311, "createTimeISO": "2023-03-01T20:41:51.000Z", "authorMeta": {"id": "6721715275417404422", "name": "mattpeterson_", "nickName": "mattpeterson_", "verified": true, "signature": "CEO of Food Challenges\nbusiness@heymattpeterson.com\nWatch my new show below \u2b07\ufe0f", "bioLink": null, "avatar": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/b4c0adfa4effcd4d102e9c9a26165fca~c5_720x720.jpeg?x-expires=1700452800&x-signature=Kqs2KawKIZdTz6IptgCFybCGKI8%3D", "privateAccount": false, "following": 291, "fans": 6500000, "heart": 270800000, "video": 636, "digg": 14500}, "musicMeta": {"musicName": "original sound", "musicAuthor": "mattpeterson_", "musicOriginal": true, "playUrl": "https://v16m.tiktokcdn-us.com/bbecdee898bc28cddf32c9d32b597f2d/65589318/video/tos/useast5/tos-useast5-v-27dcd7-tx/2c817e9e127c4a9b97f7538198ca7daf/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TuYKYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=aDY5ZDM3aDk1O2k5OGdmNkBpam1tZTk6Zjd1aTMzZzU8NEA2YzE0LS1iNl8xYWAuMjVjYSMycjRpcjRfZXNgLS1kMS9zcw%3D%3D&l=2023111804331225ABB9D9C7E0A232E0EE&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/b4c0adfa4effcd4d102e9c9a26165fca~c5_720x720.jpeg?x-expires=1700452800&x-signature=Kqs2KawKIZdTz6IptgCFybCGKI8%3D", "musicId": "7205680811671325486"}, "webVideoUrl": "https://www.tiktok.com/@mattpeterson_/video/7205680821959757102", "videoMeta": {"height": 1280, "width": 720, "duration": 47, "coverUrl": "https://p19-sign.tiktokcdn-us.com/obj/tos-useast5-p-0068-tx/06d79779a7f148b5aa8b756973cdde28_1677703312?x-expires=1700452800&x-signature=DBmpQ0ktTetQikykrZJSswMpwiA%3D", "definition": "720p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c002-tx/04e6143d203f40e7a372d5d48f08c7a9/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=2284&bt=1142&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoAKIKQ_vjE~5sAhLrus&mime_type=video_mp4&qs=0&rc=OTg0NDlkZGQzPDY1ZDo6Z0BpM3lrOmc6Zjx1aTMzZzczNEAuMjA1X2I1NWIxLTBiXjJgYSMvbHNecjQwZHNgLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454840&l=2023111804331225ABB9D9C7E0A232E0EE&ply_type=2&policy=2&signature=583da01b174877e5da1755df2af4f269&tk=tt_chain_token"}, "diggCount": 501800, "shareCount": 135, "playCount": 4200000, "commentCount": 980, "mentions": ["@brockentoaster"]}
|
||||||
|
{"id": "7187127245557959982", "text": "nyc apartment goals\ud83c\udf06 #\u043f\u0443\u0441 #newyork #newyorkcity #newyorkapartments #apartmenttour #apartmenttoursnyc #nycapartment #nycapartmenttour #dreamapartment #apartmenttour #nyclife #foryoupage #fyp #views #citylife #realestate #nycrealestate #realtor #jannatiqbal #jigbalrealtor #apartmentview #apartmentlife #apartmenthunting #apartmenthuntingnyc #apartmenthunt #apartmenthunters #aesthetic #apartmentaesthetic #apartmentlife ", "createTime": 1673383480, "createTimeISO": "2023-01-10T20:44:40.000Z", "authorMeta": {"id": "7037337611807507502", "name": "jiqbalrealtor", "nickName": "Jannat Iqbal", "verified": false, "signature": "Realtor\u00ae\n20 | nyc luxury real estate", "bioLink": null, "avatar": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/15c9836dedad8536a233f5a182993494~c5_720x720.jpeg?x-expires=1700452800&x-signature=tVexGnsUCNrJbrrOVrN1bnd6Mg4%3D", "privateAccount": false, "following": 191, "fans": 85600, "heart": 9800000, "video": 689, "digg": 17200}, "musicMeta": {"musicName": "original sound - \ud83d\udd78\ud83d\udd77", "musicAuthor": "Maverick \u235f", "musicOriginal": true, "playUrl": "https://v19.tiktokcdn-us.com/c6027f4048db6f2c1cfa241251ae9ec9/6558933a/video/tos/useast5/tos-useast5-v-27dcd7c799-tx/owizfA4kAKDBriTwIGFahNFSnC2KxUB65h5Eo4/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TTCKYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=Ojk2aDY3PDo3ZTdoaDg4O0BpamU2aDY6ZjwzaDMzZjU8M0BgMmEzMDQzXjQxLzI1NmNeYSMvZ2tmcjQwZ2xgLS1kMWNzcw%3D%3D&l=20231118043410DDBD4E79338F89332615&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign-useast2a.tiktokcdn.com/tos-useast2a-avt-0068-giso/9c134f12eeacd98756548cb4222d3c31~c5_720x720.jpeg?x-expires=1700452800&x-signature=q%2FJlT9zLqWwVrXWmXnCZFmjT2yY%3D", "musicId": "7183251984466610971"}, "webVideoUrl": "https://www.tiktok.com/@jiqbalrealtor/video/7187127245557959982", "videoMeta": {"height": 1024, "width": 576, "duration": 11, "coverUrl": "https://p19-sign.tiktokcdn-us.com/obj/tos-useast5-p-0068-tx/28a7856227d34fc6a49e61b7910d57a5_1673383480?x-expires=1700452800&x-signature=%2FXVtVgPCkJ0YPhRkkPXMpj10vlo%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c001-tx/4614db238f6a4b5bae19d4066076959a/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=3182&bt=1591&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmootIKQ_vjdD8sAhLrus&mime_type=video_mp4&qs=0&rc=NTxlZWloOzU5NDtpZzdoOEBpM2Q3ZDQ6Zml2aDMzZzczNEAtNjNjMTQzXmAxYDUzM2BjYSNiZ3BocjRnbHJgLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454861&l=20231118043410DDBD4E79338F89332615&ply_type=2&policy=2&signature=276ff6fcce7cc994a2bf67aec6b9888a&tk=tt_chain_token"}, "diggCount": 337000, "shareCount": 2458, "playCount": 1600000, "commentCount": 2025, "mentions": []}
|
||||||
|
{"id": "7141179132758773038", "text": "Camera Zoom NYC trip #camera #camerazoom #cameratricks #SamsungSniper #samsung #s21ultra #ultrazoom #zoom #MasterOfZoom #zoomchallenge #nyc #newyorkcity #newyork #5boroughs #statueofliberty #city #viral #viraltiktok #viralvideo #fyp #fyp\u30b7 #foryoupage #explore #explorepage #crazy #views #skyscrapers #buildings #empirestatebuilding #gotham #plane #airplane #flying ", "createTime": 1662685337, "createTimeISO": "2022-09-09T01:02:17.000Z", "authorMeta": {"id": "7140807186177115182", "name": "masterofzoom", "nickName": "Dr. ZOOM", "verified": false, "signature": "camera tricks by the Master Of ZOOM", "bioLink": null, "avatar": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/634b5f3a50fdf142d819d73ff2f0abdf~c5_720x720.jpeg?x-expires=1700452800&x-signature=%2BhYjZ4Utd5GV4Dq3XeaolWiI9AY%3D", "privateAccount": false, "following": 23, "fans": 10800, "heart": 1000000, "video": 43, "digg": 1692}, "musicMeta": {"musicName": "original sound", "musicAuthor": "SulfateOctagon", "musicOriginal": true, "playUrl": "https://v19.tiktokcdn-us.com/6ab6e639da9956e6472b08ffa5ed650f/655892ca/video/tos/useast5/tos-useast5-v-27dcd7-tx/c4124d9d7cef4ec882c06803be7aca82/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TZ6KYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=NzxoaDw7Z2ZkM2g5NDU3NUBpMztrdWQ6ZnhkODMzNzU8M0AuNTVjLzFjXmAxNGAzMjIwYSMyZC1rcjQwNC9gLS1kMTZzcw%3D%3D&l=202311180432349C2BA44288995532C5A7&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/955aeee904eb864f508ce29d3426c758~c5_720x720.jpeg?x-expires=1700452800&x-signature=zxUt2tGoWUUA41HnfxsDYYLI%2BRI%3D", "musicId": "7008906952252508934"}, "webVideoUrl": "https://www.tiktok.com/@masterofzoom/video/7141179132758773038", "videoMeta": {"height": 1024, "width": 576, "duration": 9, "coverUrl": "https://p16-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/14633ef6a4a9496d87820bcd33b82809~tplv-dmt-logom:tos-useast5-i-0068-tx/d5e7f3a0c4614804a3f59c30841b4631.image?x-expires=1700452800&x-signature=cO7Fz0cbgGQzV3st4pKRwbeMFos%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c001-tx/ffff1788a7d04b2fb2a642d63d8b0d9d/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=3378&bt=1689&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoQ1IKQ_vjrvbsAhLrus&mime_type=video_mp4&qs=0&rc=M2RoZzxlaWU7PDlmNTc6aUBpam1oZDY6Zjg8ZjMzZzczNEAyNWIuMTEuNl4xLjQwNTM2YSM2XjAucjQwLmFgLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454763&l=202311180432349C2BA44288995532C5A7&ply_type=2&policy=2&signature=8143523aaaebeb0c2adbd06bc6cd1ba7&tk=tt_chain_token"}, "diggCount": 1000000, "shareCount": 2364, "playCount": 13600000, "commentCount": 4440, "mentions": []}
|
||||||
|
{"id": "7184525958605524270", "text": "The actual title is \"Confetti Dispersal Engineer\" I was on top of 1540 Broadway @timessquare.nyc #confetti #timesquare #confettidispersalengineer #nycnye2023 #timessquarenewyearseve #newyorkcity ", "createTime": 1672777816, "createTimeISO": "2023-01-03T20:30:16.000Z", "authorMeta": {"id": "6941632576080954373", "name": "kaytlyn417", "nickName": "Kaytlyn", "verified": false, "signature": "", "bioLink": null, "avatar": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/fef72974283af077d7ebe2def640ca1c~c5_720x720.jpeg?x-expires=1700452800&x-signature=t5Kv1WZuyPc%2B3HcC6T1TST8YAz8%3D", "privateAccount": false, "following": 639, "fans": 649, "heart": 317100, "video": 47, "digg": 13700}, "musicMeta": {"musicName": "original sound", "musicAuthor": "Kaytlyn", "musicOriginal": true, "playUrl": "https://v16m.tiktokcdn-us.com/8f94d1f8bf9efc01ae76b7345cecdbac/65589347/video/tos/useast5/tos-useast5-v-27dcd7-tx/a0b1682711b3408ab1de237b302a5417/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TWCKYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=OjNoaTY5N2dpZTQ5Z2dkZEBpM2t5NjM6ZnA8aDMzZzU8NEBgMDReYDE2Ni4xLy00LS5hYSNraW5fcjRfLW5gLS1kMS9zcw%3D%3D&l=20231118043422D72F0FAAD54DAF32DE6B&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/fef72974283af077d7ebe2def640ca1c~c5_720x720.jpeg?x-expires=1700452800&x-signature=t5Kv1WZuyPc%2B3HcC6T1TST8YAz8%3D", "musicId": "7184525965224119083"}, "webVideoUrl": "https://www.tiktok.com/@kaytlyn417/video/7184525958605524270", "videoMeta": {"height": 1028, "width": 576, "duration": 25, "coverUrl": "https://p16-sign.tiktokcdn-us.com/obj/tos-useast5-p-0068-tx/8a2718c351f7440c847b8e12ff8d1d0c?x-expires=1700452800&x-signature=QVbA29N6YsskWMI6kQQahJA%2FrVY%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c001-tx/706417ac4e19428fb64d0ac3033c7573/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=3580&bt=1790&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoPtIKQ_vjeX7sAhLrus&mime_type=video_mp4&qs=0&rc=NzVmMzQ6MzxkNjZnOzU2NUBpank0cGk6ZmQ7aDMzZzczNEA1YS5gNWM1NTYxLmNhYjYtYSMuaTJvcjRfcm5gLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454887&l=20231118043422D72F0FAAD54DAF32DE6B&ply_type=2&policy=2&signature=7691a30e5dcc0f8d9d8c1ba92a83cd7e&tk=tt_chain_token"}, "diggCount": 313100, "shareCount": 4284, "playCount": 2700000, "commentCount": 2442, "mentions": ["@timessquare.nyc"]}
|
||||||
|
{"id": "6994877648145091845", "text": "like y hago mi trend en la estatua de la libertad \ud83d\uddfd #newyorkcity #fyp\u30b7 #xyzbca", "createTime": 1628621866, "createTimeISO": "2021-08-10T18:57:46.000Z", "authorMeta": {"id": "5368460", "name": "iamferv", "nickName": "katteyes", "verified": false, "signature": "latina loca", "bioLink": null, "avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/0ae634bb9d7a0769da288fe6983a786c~c5_720x720.jpeg?x-expires=1700452800&x-signature=MlHwsZRj4YRPB93aCKVOfBTs2yk%3D", "privateAccount": false, "following": 246, "fans": 37100000, "heart": 2600000000, "video": 859, "digg": 38100}, "musicMeta": {"musicName": "sonido original", "musicAuthor": "Nico Mejia \u2606", "musicOriginal": true, "playUrl": "https://v19.tiktokcdn-us.com/4a1877d1fec213180f751ce19a4c37f3/655892dd/video/tos/useast5/tos-useast5-v-27dcd7c799-tx/5d8983535e134101bccd7afaf7112529/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TZ6KYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=aDk0ODdpODc8OmY8ODU6M0Bpam41ZTs6ZmlsNzMzNzU8M0AvXl8tMF81Nl8xMF9iX2IyYSNiYC1mcjQwaC5gLS1kMTZzcw%3D%3D&l=202311180432349C2BA44288995532C5A7&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/afddd11ddfb0c1b8c9307c9f1c395051~c5_720x720.jpeg?x-expires=1700452800&x-signature=IxP1antHt2shOD9pH4W4kTDlhVM%3D", "musicId": "6990477360223193862"}, "webVideoUrl": "https://www.tiktok.com/@iamferv/video/6994877648145091845", "videoMeta": {"height": 960, "width": 540, "duration": 15, "coverUrl": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/ba555db7b3664cfeb4046d4b81032716?x-expires=1700452800&x-signature=GqI1tJb%2Bxlhaq9xbfQDp6a9WfjE%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast2a/tos-useast2a-ve-0068c003/89e3f18aa36446988b7dc640dbaa37fe/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=4326&bt=2163&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoQ1IKQ_vjrvbsAhLrus&mime_type=video_mp4&qs=0&rc=PGZnOmlnPGZkMzNpODM3N0BpM3Y4djo6ZjpmNzMzNzczM0A1YC5gYDZeXl4xNl40Y2AxYSNuaHNncjQwbDZgLS1kMTZzcw%3D%3D&btag=e00008000&expire=1700454769&l=202311180432349C2BA44288995532C5A7&ply_type=2&policy=2&signature=a53a6c4611829acf047e7af2bc4aec7b&tk=tt_chain_token"}, "diggCount": 1200000, "shareCount": 12800, "playCount": 7800000, "commentCount": 4393, "mentions": []}
|
||||||
|
{"id": "7247171971023392046", "text": "New Method Unlocked \ud83e\udef4\ud83c\udffd #nyc #newyork #newyorkcity #nypd #bronx #police #cop #cops #ny #mta #subway #train ", "createTime": 1687363726, "createTimeISO": "2023-06-21T16:08:46.000Z", "authorMeta": {"id": "7230324566047573038", "name": "nyceeclipz", "nickName": "NYCEECLIPZ", "verified": false, "signature": "NEW YORK \ud83d\uddfd", "bioLink": null, "avatar": "https://p19-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/b3e6ad0786610ef7ba2262f260d078a2~c5_720x720.jpeg?x-expires=1700452800&x-signature=%2BqVLAf%2FA6VweL7zNBnHjHPA9Z%2B0%3D", "privateAccount": false, "following": 4, "fans": 46100, "heart": 1600000, "video": 236, "digg": 655}, "musicMeta": {"musicName": "Empire State of Mind (Part II) Broken Down", "musicAuthor": "Alicia Keys", "musicOriginal": false, "playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tos-alisg-ve-2774/oMTeULAf2KB2gKPn2PmTUUFReHGA51fmSvshZ9", "coverMediumUrl": "https://p16-sg.tiktokcdn.com/aweme/200x200/tos-alisg-v-2774/3cba7165da354877ba41fce934fa2c3f.jpeg", "musicId": "6696417780016613377"}, "webVideoUrl": "https://www.tiktok.com/@nyceeclipz/video/7247171971023392046", "videoMeta": {"height": 1024, "width": 576, "duration": 19, "coverUrl": "https://p16-sign.tiktokcdn-us.com/obj/tos-useast5-p-0068-tx/5061218c69654b98bf09523fef4acc7d_1687363727?x-expires=1700452800&x-signature=pnYwebP44Evmluw2KVX9jZc8VWA%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-pve-0068-tx/ocCOAIVJx8eLeIjgQJDniKbsoKK6A92YHkTfqj/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=4736&bt=2368&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8Zmo9KIKQ_vjjh8sAhLrus&mime_type=video_mp4&qs=0&rc=ZDg4ZWk8Z2kzZTw4MzY0OkBpM2RnbTs6ZmlrbDMzZzczNEAvLi0tMWAtNV8xLzBfXy5eYSNvXjBrcjRvczZgLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454826&l=20231118043327E609B61FC7C30432C10D&ply_type=2&policy=2&signature=4f03bd56a82f0b38f76fedf1b9ffbdfe&tk=tt_chain_token"}, "diggCount": 441900, "shareCount": 10500, "playCount": 6200000, "commentCount": 3606, "mentions": []}
|
||||||
|
{"id": "7284338203509722411", "text": "New York City declares state of emergency! #news #nyc #newyork #newyorkcity #flooding #foryou #fyp #breakingnews #bikinibottomnews ", "createTime": 1696017175, "createTimeISO": "2023-09-29T19:52:55.000Z", "authorMeta": {"id": "6617414938737983494", "name": "bikini.bottom.news", "nickName": "Bikini Bottom News", "verified": false, "signature": "THE #1 NEWS STATION IN THE WORLD!", "bioLink": null, "avatar": "https://p19-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/3ed95ec44a26d3d48470edd3d000686b~c5_720x720.jpeg?x-expires=1700452800&x-signature=RPKOmVScTIegzyqo3f9sMJqRCfU%3D", "privateAccount": false, "following": 68, "fans": 3400000, "heart": 49500000, "video": 185, "digg": 1030}, "musicMeta": {"musicName": "original sound", "musicAuthor": "Bikini Bottom News", "musicOriginal": true, "playUrl": "https://v19.tiktokcdn-us.com/3804632aa76df96f6897ee44b7d3441f/6558930a/video/tos/useast5/tos-useast5-v-27dcd7-tx/ooPHOMdtEyhocpBmAEzXqWf5jxHiwBHIX3KPMK/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7Tn6KYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=NWU1OjNnOGQ8PGc1NjdmaUBpajpsbTo6ZjlsbjMzZzU8NEAtNC5jMGMuX2IxNjUvNS0yYSNiaGRfcjRfal9gLS1kMS9zcw%3D%3D&l=202311180432441FE70F787FC7C1323FB3&btag=e00010000&download=true", "coverMediumUrl": "https://p19-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/3ed95ec44a26d3d48470edd3d000686b~c5_720x720.jpeg?x-expires=1700452800&x-signature=RPKOmVScTIegzyqo3f9sMJqRCfU%3D", "musicId": "7284338286074546987"}, "webVideoUrl": "https://www.tiktok.com/@bikini.bottom.news/video/7284338203509722411", "videoMeta": {"height": 1024, "width": 576, "duration": 62, "coverUrl": "https://p16-sign.tiktokcdn-us.com/obj/tos-useast5-p-0068-tx/7fb3d326f242415f937c9cf721db1c83_1696017176?x-expires=1700452800&x-signature=IuH4WYzuSExMtisIPbGBhDJG0Zs%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c001-tx/o4RfWCAHI9IpoTF4mtKZXE5vyyCKgzWxiQhwAB/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=1324&bt=662&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8Zmo81IKQ_vjaddsAhLrus&mime_type=video_mp4&qs=0&rc=NzM6N2c0M2g8OTZnOjNmaEBpM2t2cmQ6ZnZsbjMzZzczNEAvNGNjMzUtX2IxNDBgYGE0YSNfYjJgcjRfZ19gLS1kMS9zcw%3D%3D&btag=e00010000&expire=1700454826&l=202311180432441FE70F787FC7C1323FB3&ply_type=2&policy=2&signature=7cdfa3615a513608ed6b059bf47fba0b&tk=tt_chain_token"}, "diggCount": 808900, "shareCount": 18400, "playCount": 4200000, "commentCount": 13700, "mentions": []}
|
||||||
|
{"id": "6977361702799117573", "text": "\ud83d\udd2b #TalentoTikTok #trending #newyorkcity #argentina #viral #parati", "createTime": 1624543620, "createTimeISO": "2021-06-24T14:07:00.000Z", "authorMeta": {"id": "6775735036597404678", "name": "mathiioficial", "nickName": "mathiioficial", "verified": false, "signature": "Solo quiero sacarte una sonrisa \ud83d\ude0a\nTiktoker, Comediante \ud83e\udd29\nParte 3 y 4 en Insta", "bioLink": null, "avatar": "https://p77-sign-va.tiktokcdn.com/musically-maliva-obj/1662187642202118~c5_720x720.jpeg?x-expires=1700452800&x-signature=OuR3RK6QpSAluWOzjgyn44KPAQk%3D", "privateAccount": false, "following": 246, "fans": 260600, "heart": 2800000, "video": 54, "digg": 13900}, "musicMeta": {"musicName": "sonido original", "musicAuthor": "mathiioficial", "musicOriginal": true, "playUrl": "https://v16m.tiktokcdn-us.com/58bb555bc1690b0db00ec15e7dfa3db3/655892de/video/tos/useast5/tos-useast5-v-27dcd7c799-tx/7a4b2b4106404adab4b4ec3432f92df7/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7Td6KYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=Mzo0aTppNTY8O2Y0Ozg1ZEBpM25tOjZ1cTQ8NjMzNzU8M0AzYzYuMjMzXy4xMGBfXl5hYSMuYy41cmVtMF5gLS1kMTZzcw%3D%3D&l=202311180432516AED2E2BC2FA1D407FA5&btag=e00008000&download=true", "coverMediumUrl": "https://p77-sign-va.tiktokcdn.com/musically-maliva-obj/1662187642202118~c5_720x720.jpeg?x-expires=1700452800&x-signature=OuR3RK6QpSAluWOzjgyn44KPAQk%3D", "musicId": "6977361514298690310"}, "webVideoUrl": "https://www.tiktok.com/@mathiioficial/video/6977361702799117573", "videoMeta": {"height": 1024, "width": 576, "duration": 11, "coverUrl": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/5d6a0cf45a4b4a41a5557e2867169971?x-expires=1700452800&x-signature=yRjFTy5LGwEWPEbHV3EhFxG2z68%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast2a/tos-useast2a-pve-0068/c6582c87d1e04c3db0e872310f003299/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=2712&bt=1356&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8Zmoi1IKQ_vjj8ZsAhLrus&mime_type=video_mp4&qs=0&rc=ZTo2NmRlPGU7NTc2ODdkZ0BpM3I1cnF3Ong8NjMzNzczM0BgXi41LmJfNjIxMl4zNDMyYSNtYG1jXi5iL15gLS1kMTZzcw%3D%3D&btag=e00008000&expire=1700454782&l=202311180432516AED2E2BC2FA1D407FA5&ply_type=2&policy=2&signature=fb6c58665506b85f93bdbdf98b622096&tk=tt_chain_token"}, "diggCount": 661200, "shareCount": 20400, "playCount": 3700000, "commentCount": 4074, "mentions": []}
|
||||||
|
{"id": "7283324348159560993", "text": "view never gets old \ud83c\udfd9\ufe0f via @Val Torrico #travel #nyc #newyork #newyorkcity #vacation #airplane #airline #flights #traveltheworld", "createTime": 1695781176, "createTimeISO": "2023-09-27T02:19:36.000Z", "authorMeta": {"id": "7213313722315162630", "name": "travel", "nickName": "Travel \ud83c\udf0d", "verified": false, "signature": "\u2708\ufe0f The Best Travel & Vacation Destinations \ud83c\udf34\n\ud83d\udce7 Subscribe To Our Newsletter \u2b07\ufe0f", "bioLink": null, "avatar": "https://p16-sign-useast2a.tiktokcdn.com/tos-useast2a-avt-0068-euttp/e7aff57cade418bd2ec7ff75751c40dc~c5_720x720.jpeg?x-expires=1700452800&x-signature=aW0SGiqKPcY4GVNZNfYR7MdEdkg%3D", "privateAccount": false, "following": 0, "fans": 1100000, "heart": 43000000, "video": 172, "digg": 14}, "musicMeta": {"musicName": "original sound", "musicAuthor": "haley anna \ud83c\udf31", "musicOriginal": true, "playUrl": "https://v19.tiktokcdn-us.com/07d67438890fd01bf13c1faebd56a340/65589357/video/tos/useast2a/tos-useast2a-v-27dcd7/208ce15decaf47ca9294c635deac3a9b/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=124&bt=62&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TeCKYZiyq8Z&mime_type=audio_mpeg&qs=3&rc=ZjQ1aWc2NztpaWU5NzlnM0BpMzxwczk6ZmpsNzMzNzU8M0BiLTNeYTEyXmMxY2JhYDA1YSNyMGwvcjRnbmZgLS1kMTZzcw%3D%3D&l=20231118043443AFA3824F3616D732A502&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/f153f35246fdfff8706c7d00b0da0068~c5_720x720.jpeg?x-expires=1700452800&x-signature=fl6hQ0w30m3U9l2%2FZ4sPkZQXrsw%3D", "musicId": "6759939263413996294"}, "webVideoUrl": "https://www.tiktok.com/@travel/video/7283324348159560993", "videoMeta": {"height": 1024, "width": 576, "duration": 11, "coverUrl": "https://p16-sign-useast2a.tiktokcdn.com/obj/tos-useast2a-p-0037-euttp/0d8c014548f842cf8380867bc505e739_1695781179?x-expires=1700452800&x-signature=bbUsHkFqxBpi%2FaZm67f%2FYEHCSn0%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast2a/tos-useast2a-ve-0068c001-euttp/ocfhTCsyiADMhU4QhBPcgIkAn9TtEJucC96oIz/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=3356&bt=1678&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8Zmo7tIKQ_vjX4bsAhLrus&mime_type=video_mp4&qs=0&rc=O2doOzw4ODw4aDQ4OjxlNEBpM25ybTQ6ZnZzbjMzZjczM0AtYi41Xy0uXjMxYS5jMl5jYSNxbHFycjRfLjZgLS1kMWNzcw%3D%3D&btag=e00008000&expire=1700454894&l=20231118043443AFA3824F3616D732A502&ply_type=2&policy=2&signature=c0b5b7da8c1a88ca63eb3b5fef1369e9&tk=tt_chain_token"}, "diggCount": 288000, "shareCount": 1830, "playCount": 3200000, "commentCount": 762, "mentions": ["@Val"]}
|
||||||
|
{"id": "6912216595318197510", "text": "tag someone who considers themselves an iNtELlecTual #ThisCouldBeUs #richmom #brooklyn #parkslope #goldengoose #newyorkcity #chemex #hudson", "createTime": 1609375854, "createTimeISO": "2020-12-31T00:50:54.000Z", "authorMeta": {"id": "6730347667949519878", "name": "tinx", "nickName": "Tinx", "verified": true, "signature": "\u26a1\ufe0f\ud83c\udf4c\u26a1\ufe0f\nPOV: ur the oldest girl on TikTok & u live in Los Angeles\nIG @tinx", "bioLink": null, "avatar": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1665642039572485~c5_720x720.jpeg?x-expires=1700452800&x-signature=GqI%2FmLevPW1Iit%2FuxmnboiChIpE%3D", "privateAccount": false, "following": 612, "fans": 1500000, "heart": 91800000, "video": 2309, "digg": 47500}, "musicMeta": {"musicName": "original sound", "musicAuthor": "Tinx", "musicOriginal": true, "playUrl": "https://v16m.tiktokcdn-us.com/79bd3d0ef086fa03d74e44775527e956/65589348/video/tos/useast5/tos-useast5-v-27dcd7-tx/989bbb67fcf04d1683ae92ada511cccb/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TrYKYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=ZDplOjVlPDM4ZDVkOWk4ZUBpamZ2NHJudXZseTMzZjU8M0AyMV9fL19jX2AxMjZgYWJiYSNsMTQ0ZWUwLWpfLS1iMTZzcw%3D%3D&l=20231118043357383CB4BC6DD3AE32F4A6&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1665642039572485~c5_720x720.jpeg?x-expires=1700452800&x-signature=GqI%2FmLevPW1Iit%2FuxmnboiChIpE%3D", "musicId": "6912216569959566085"}, "webVideoUrl": "https://www.tiktok.com/@tinx/video/6912216595318197510", "videoMeta": {"height": 960, "width": 540, "duration": 51, "coverUrl": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/d0bf2af3c816465c83dd441cefcafc9b?x-expires=1700452800&x-signature=Qy868OI9j2fkQ1NUqmrFUbxEzSI%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c003-tx/63eca1f2ea6e43af98a920b04879b2fd/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=1552&bt=776&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8Zmo-KIKQ_vjPZ8sAhLrus&mime_type=video_mp4&qs=0&rc=ZGg0NWk3ODxoNTpoZjY8N0BpMzZpbnVrdXRseTMzZzczM0AxMjA1YzYwNmMxYDQzYGBeYSMtZzZwNm4yLWpfLS0vMTZzcw%3D%3D&btag=e00008000&expire=1700454888&l=20231118043357383CB4BC6DD3AE32F4A6&ply_type=2&policy=2&signature=d17a1987543db7c228b52c0a1a607d0b&tk=tt_chain_token"}, "diggCount": 363800, "shareCount": 6059, "playCount": 2000000, "commentCount": 1959, "mentions": []}
|
||||||
|
{"id": "7008648114076765445", "text": "You ain\u2019t in NY if you don\u2019t get honked at 0.5 seconds after the light turns green #whatisnewyork #fyp #foryoupage #iloveny #nyc #newyorkcity", "createTime": 1631828053, "createTimeISO": "2021-09-16T21:34:13.000Z", "authorMeta": {"id": "6824314274929443846", "name": "whatisnewyorkofficial", "nickName": "WhatIsNewYork", "verified": false, "signature": "From the creator of @SubwayCreaturesOfficial", "bioLink": null, "avatar": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1666093936635909~c5_720x720.jpeg?x-expires=1700452800&x-signature=T%2Bx8JBcSU49cWBE6VZaB5WWjPVA%3D", "privateAccount": false, "following": 37, "fans": 682600, "heart": 25600000, "video": 1113, "digg": 309}, "musicMeta": {"musicName": "original sound", "musicAuthor": "WhatIsNewYork", "musicOriginal": true, "playUrl": "https://v16m.tiktokcdn-us.com/9f3a240045ecbe45399fd2fe9015d5fc/65589399/video/tos/useast5/tos-useast5-v-27dcd7-tx/3dc361646c86435ca219f9bf8dde5c5d/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TqiKYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=aGRlZmhnOTY8OzhlPDk6ZkBpanFzbjw6ZnB1ODMzNzU8M0A2YTEwMS5fX14xXzMyLjAuYSNzL3FlcjRfZC5gLS1kMTZzcw%3D%3D&l=202311180435126FD3891AECC2D6326F1B&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1666093936635909~c5_720x720.jpeg?x-expires=1700452800&x-signature=T%2Bx8JBcSU49cWBE6VZaB5WWjPVA%3D", "musicId": "7008647978953018117"}, "webVideoUrl": "https://www.tiktok.com/@whatisnewyorkofficial/video/7008648114076765445", "videoMeta": {"height": 1024, "width": 576, "duration": 57, "coverUrl": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/3644af48015d4403b77836544fd65230_1631828072?x-expires=1700452800&x-signature=v0yVNsRABBnlsvwL%2F2JLucv3%2BNY%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c001-tx/f1d2f1d806fc44ea8b48f7243cf85846/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=2770&bt=1385&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8Zmoj_IKQ_vjHzGsAhLrus&mime_type=video_mp4&qs=0&rc=NGQ2ZGlmZmlmaWc5NjQ4ZUBpanFzZGU6ZmR1ODMzNzczM0A2NDE1Xy81XzUxYi4vLjQzYSNpbG9icjRfZC5gLS1kMTZzcw%3D%3D&btag=e00008000&expire=1700454969&l=202311180435126FD3891AECC2D6326F1B&ply_type=2&policy=2&signature=d738297d15444241b7cc162b1513175c&tk=tt_chain_token"}, "diggCount": 316000, "shareCount": 34400, "playCount": 1800000, "commentCount": 5810, "mentions": []}
|
||||||
|
{"id": "7000842829748653318", "text": "part 2 #H&m #clothes #nyc #asthetic #outfits #newyorkcity #ChewyChattyPets", "createTime": 1630010743, "createTimeISO": "2021-08-26T20:45:43.000Z", "authorMeta": {"id": "6991649107485197317", "name": "mmfits", "nickName": "mmfits", "verified": false, "signature": "", "bioLink": null, "avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/a07d6eba781ef0faf421436b428da9d7~c5_720x720.jpeg?x-expires=1700452800&x-signature=G6jdgJvTeDr1YM07vXn94iOm9SI%3D", "privateAccount": false, "following": 17, "fans": 7811, "heart": 1500000, "video": 30, "digg": 665}, "musicMeta": {"musicName": "TYSM FOR USING THIS SOUND", "musicAuthor": "L", "musicOriginal": true, "playUrl": "https://v19.tiktokcdn-us.com/3290aba3928b82b30da62f985bea4765/65589368/video/tos/useast5/tos-useast5-v-27dcd7c799-tx/ab043620e4e743978c39b179e78f674d/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TdCKYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=NjNmOjpmZWkzZDw8NjlpaEBpM3B1M2dscDVwNTMzODU8M0AuYi9eNl8xNTAxYDZeYmEzYSMwaWdvLy5ocjNgLS1kMTRzcw%3D%3D&l=20231118043459609FF50C459BC1333500&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/9faa2517e529e994c74ddb66b0bd97e9~c5_720x720.jpeg?x-expires=1700452800&x-signature=TZjudhyeR8Vw6VT03OTCLYrBo6w%3D", "musicId": "6957338977586154245"}, "webVideoUrl": "https://www.tiktok.com/@mmfits/video/7000842829748653318", "videoMeta": {"height": 1024, "width": 576, "duration": 11, "coverUrl": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/bcd90b266d2e49e4a6cc576fd37b7321?x-expires=1700452800&x-signature=ygWuvUbC0eheTabbJlhf%2F23QgK0%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c001-tx/43b321be8bcd4fc2b25f50c42f40fe16/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=2544&bt=1272&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoitIKQ_vjE~5sAhLrus&mime_type=video_mp4&qs=0&rc=NzY5NmdpZzg2O2c8ZTtkNEBpM3J3bTM6Znl5NzMzNzczM0BgXjYyMTJeNi4xNjEtMzY0YSNoL2tjcjRvZ2dgLS1kMTZzcw%3D%3D&btag=e00008000&expire=1700454910&l=20231118043459609FF50C459BC1333500&ply_type=2&policy=2&signature=60c8ea0f575100d1b6e05feecd1f10be&tk=tt_chain_token"}, "diggCount": 890300, "shareCount": 10300, "playCount": 3500000, "commentCount": 9927, "mentions": []}
|
||||||
|
{"id": "7183744098463976746", "text": "Not gonna get cleaned up until 2024 at this rate #nyc #newyear #timessquare #dsny #sanitation #2023 #newyorkcity #manhattan ", "createTime": 1672595776, "createTimeISO": "2023-01-01T17:56:16.000Z", "authorMeta": {"id": "6705361772700500997", "name": "nychighlife", "nickName": "NYC High Life", "verified": false, "signature": "New York City", "bioLink": null, "avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/12984c4452fec6d3ff985933578ce215~c5_720x720.jpeg?x-expires=1700452800&x-signature=ol4IR1h9h1IMIkw2847Uq%2B5Gf7M%3D", "privateAccount": false, "region": "US", "following": 29, "fans": 1000000, "heart": 64800000, "video": 607, "digg": 855}, "musicMeta": {"musicName": "Mississippi Queen", "musicAuthor": "The Hit Crew", "musicOriginal": false, "playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tos-alisg-ve-2774/o4f17BuKGdFE4AA28KDOAUY2eQqWe6mCfFa1Jd", "coverMediumUrl": "https://p16-sg.tiktokcdn.com/aweme/200x200/tos-alisg-v-2774/d4f7c9a40f9547f5b182c7f258091d3d.jpeg", "musicId": "6730005467747076098"}, "webVideoUrl": "https://www.tiktok.com/@nychighlife/video/7183744098463976746", "videoMeta": {"height": 1024, "width": 576, "duration": 10, "coverUrl": "https://p16-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/47d01d1e0fde4e90b9c0396cd67e5283_1672595777~tplv-dmt-logom:tos-useast5-i-0068-tx/3f3bec5b5922445ca19023d76ae1a1b8.image?x-expires=1700452800&x-signature=guFj3gAWIwu05FTeng2CZX3tlPM%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c004-tx/9542aa67866249869ccac4bca6260860/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=6382&bt=3191&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8Zmoy1IKQ_vjWrGsAhLrus&mime_type=video_mp4&qs=0&rc=NTszZGk4NTw7M2kzZGk6ZkBpMzQ6czg6Zmd2aDMzZzczNEAyYzMtXjNfXzYxLjQuLl9gYSM2ZWJycjRfZmxgLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454761&l=20231118043231B2139CBCF14BAC3213C4&ply_type=2&policy=2&signature=69e473fb9501afbe567e48583b717ef2&tk=tt_chain_token"}, "diggCount": 1400000, "shareCount": 4505, "playCount": 11400000, "commentCount": 3677, "mentions": []}
|
||||||
|
{"id": "6853419939970157829", "text": "Hip Hop Harrying our way through NYC #SourPatchKidsDay #sourpatchkids #sourthensweet #newyorkcity", "createTime": 1595686178, "createTimeISO": "2020-07-25T14:09:38.000Z", "authorMeta": {"id": "6814075756164858885", "name": "therealsourpatchkids", "nickName": "Sour Patch Kids", "verified": true, "signature": "sour, sweet, gone!", "bioLink": null, "avatar": "https://p19-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/3ce2c1db6322995f7d52961b509aa39d~c5_720x720.jpeg?x-expires=1700452800&x-signature=UGGZaE8ydWu4MIONtw%2F3kzcaGBQ%3D", "privateAccount": false, "following": 309, "fans": 1500000, "heart": 16500000, "video": 390, "digg": 2095}, "musicMeta": {"musicName": "original sound", "musicAuthor": "Sour Patch Kids", "musicOriginal": true, "playUrl": "https://v16m.tiktokcdn-us.com/9cd8e159ac20ca152da8152e09285d45/65589330/video/tos/useast5/tos-useast5-v-27dcd7-tx/c6578980376541d3baae9d9bc3ea3bab/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7T5CKYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=ZjRlZmRoZTY8NmU1Nmk2ZkBpanR4a2VmdTw2djMzMzU8M0AzYmNiLl9fXi4xMDQxMzU1YSNoLV9hcnBjbmJfLS1hMTZzcw%3D%3D&l=202311180434155283515FAC4DFC3331EB&btag=e00008000&download=true", "coverMediumUrl": "https://p19-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/3ce2c1db6322995f7d52961b509aa39d~c5_720x720.jpeg?x-expires=1700452800&x-signature=UGGZaE8ydWu4MIONtw%2F3kzcaGBQ%3D", "musicId": "6853419935423580933"}, "webVideoUrl": "https://www.tiktok.com/@therealsourpatchkids/video/6853419939970157829", "videoMeta": {"height": 1024, "width": 576, "duration": 9, "coverUrl": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/3837d801cd6543d8ba56985f3fcea394_1595686181?x-expires=1700452800&x-signature=tT2d5S3gsd6kESN3%2B6Na6hsmuR8%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c002-tx/6f53b45a6b204225a1341beec9079a90/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=2626&bt=1313&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoAtIKQ_vjXXbsAhLrus&mime_type=video_mp4&qs=0&rc=ZmQ5aDRnPGdmOjY6ODtoNkBpamtodnd4ajo2djMzNTczM0BfXzQ1L2JfNV4xLWNfXy9fYSMzZ2xwaS5ybmJfLS0yMTZzcw%3D%3D&btag=e00008000&expire=1700454865&l=202311180434155283515FAC4DFC3331EB&ply_type=2&policy=2&signature=e89582d4014d2cc634d4aaf635722091&tk=tt_chain_token"}, "diggCount": 334600, "shareCount": 10800, "playCount": 3400000, "commentCount": 3991, "mentions": []}
|
||||||
|
{"id": "7032011608687856942", "text": "I GOT THE JOE BIDEN PI\u00d1ATAS ON DECK \ud83c\udf89 - FULL EPISODES ON IG @sidetalknyc #fyp #foryou #viral #newyork #nyc #newyorkcity #sidetalk #sidetalknyc", "createTime": 1637267794, "createTimeISO": "2021-11-18T20:36:34.000Z", "authorMeta": {"id": "6741965339380745221", "name": "sidetalknyc", "nickName": "Sidetalk", "verified": true, "signature": "New York\u2019s one-minute street show\nFULL EPISODES ON IG @sidetalknyc \ud83d\uddfd", "bioLink": null, "avatar": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1645987854565382~c5_720x720.jpeg?x-expires=1700452800&x-signature=fxjEeUtvVxvMlXOwyqQgv2m5sFw%3D", "privateAccount": false, "following": 2, "fans": 4400000, "heart": 78700000, "video": 198, "digg": 324}, "musicMeta": {"musicName": "original sound", "musicAuthor": "Sidetalk", "musicOriginal": true, "playUrl": "https://v19.tiktokcdn-us.com/076b6d98a2889889016275497e402f63/655892ec/video/tos/useast5/tos-useast5-v-27dcd7-tx/2ddaa1de84074dd985478fdb98365a59/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7T.6KYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=OTlkNWQ1NjNlZGlkN2Y3O0BpM3N3aTU6Zm9lOTMzZzU8NEAyMi0tYDFgXjMxLzRgLTUxYSNzYXFwcjQwZl9gLS1kMS9zcw%3D%3D&l=202311180432582874CC27932CDC33D2BF&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1645987854565382~c5_720x720.jpeg?x-expires=1700452800&x-signature=fxjEeUtvVxvMlXOwyqQgv2m5sFw%3D", "musicId": "7032011426357398319"}, "webVideoUrl": "https://www.tiktok.com/@sidetalknyc/video/7032011608687856942", "videoMeta": {"height": 1024, "width": 576, "duration": 17, "coverUrl": "https://p16-sign.tiktokcdn-us.com/obj/tos-useast5-p-0068-tx/cb5705e1376a4813a1b56a075d360769_1637267796?x-expires=1700452800&x-signature=UtiDHEEWhI8%2BJTW8cqYWQimwsx8%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-pve-0068-tx/774957d3dac245efa0437c27a158d746/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=2960&bt=1480&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoX1IKQ_vjrojsAhLrus&mime_type=video_mp4&qs=0&rc=M2k2NjhpaWg1ZGZkPDc4ZEBpanB3aTU6ZmxlOTMzZzczNEA1YmEyNWIvNV4xL2IxLzNfYSNuYXFwcjRvZl9gLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454796&l=202311180432582874CC27932CDC33D2BF&ply_type=2&policy=2&signature=7536d127efd16c42d42852bfed95091e&tk=tt_chain_token"}, "diggCount": 590600, "shareCount": 7864, "playCount": 8100000, "commentCount": 1663, "mentions": ["@sidetalknyc"]}
|
||||||
|
{"id": "7081393842590715182", "text": "Y\u2019all spoiled here \ud83c\udf55 #pizza #nyc #newyorkcity #vlog", "createTime": 1648765487, "createTimeISO": "2022-03-31T22:24:47.000Z", "authorMeta": {"id": "6642555898018086918", "name": "callmebelly", "nickName": "elliott", "verified": true, "signature": "food/travel/me \ud83c\udf08\nbilingual\ud83c\uddeb\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\uddf9\ud83c\uddf3\n30+ countries \ud83c\udf0d check out my playlists", "bioLink": null, "avatar": "https://p19-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/bb749c6fa354274639525830119835e4~c5_720x720.jpeg?x-expires=1700452800&x-signature=Nc1alCT%2FtAnd0YxdpdGLSzbyqBk%3D", "privateAccount": false, "following": 1255, "fans": 1400000, "heart": 58700000, "video": 2799, "digg": 45100}, "musicMeta": {"musicName": "Empire State of Mind (Part II) Broken Down", "musicAuthor": "Alicia Keys", "musicOriginal": false, "playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tos-alisg-ve-2774/oMTeULAf2KB2gKPn2PmTUUFReHGA51fmSvshZ9", "coverMediumUrl": "https://p16-sg.tiktokcdn.com/aweme/200x200/tos-alisg-v-2774/3cba7165da354877ba41fce934fa2c3f.jpeg", "musicId": "6696417780016613377"}, "webVideoUrl": "https://www.tiktok.com/@callmebelly/video/7081393842590715182", "videoMeta": {"height": 1024, "width": 576, "duration": 23, "coverUrl": "https://p19-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/1e64c7ea82fb459ba30979c9867994d1_1648765488~tplv-dmt-logom:tos-useast5-p-0000-tx/8d02a7b2876e42bb83a49b394d618fb6.image?x-expires=1700452800&x-signature=qkvWVfOfB9lo4%2B27%2FlRc%2FRjxlJ0%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c001-tx/ecb59b4788a7415e8a47938e3307e6dc/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=2796&bt=1398&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoVKIKQ_vjlkjsAhLrus&mime_type=video_mp4&qs=0&rc=ODk5ZGVoN2Q0NTQ2NDxoaUBpanJzdjk6Zjg1PDMzZzczNEBgLTUxYy8tXy8xXl4uMF8yYSNqLi5ucjRnZjBgLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454848&l=202311180433451FE70F787FC7C1324627&ply_type=2&policy=2&signature=56ac284d39b3ddde18325d314065e079&tk=tt_chain_token"}, "diggCount": 383000, "shareCount": 1591, "playCount": 3700000, "commentCount": 1271, "mentions": []}
|
||||||
|
{"id": "6943447375952219398", "text": "concrete jungle wet dream tomato\u2764\ufe0f#nyc #skyline #newyorkcity #flyNYON #view", "createTime": 1616647331, "createTimeISO": "2021-03-25T04:42:11.000Z", "authorMeta": {"id": "6746367613540041734", "name": "shaleensunesara", "nickName": "Shaleen", "verified": false, "signature": "", "bioLink": null, "avatar": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/5634a1b0b92dd8512c650360231e164c~c5_720x720.jpeg?x-expires=1700452800&x-signature=439eyYZk4Qzmyy9BXKRRMj3fq6s%3D", "privateAccount": false, "region": "US", "following": 226, "fans": 57300, "heart": 4900000, "video": 19, "digg": 0}, "musicMeta": {"musicName": "Empire State of Mind (Part II) Broken Down", "musicAuthor": "Alicia Keys", "musicOriginal": false, "playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tos-alisg-ve-2774/b1e798312d6d42c99763ce8d3f7fcd0d", "coverMediumUrl": "https://p16-sg.tiktokcdn.com/aweme/200x200/tos-alisg-v-2774/3cba7165da354877ba41fce934fa2c3f.jpeg", "musicId": "6612970648635443205"}, "webVideoUrl": "https://www.tiktok.com/@shaleensunesara/video/6943447375952219398", "videoMeta": {"height": 1024, "width": 576, "duration": 11, "coverUrl": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/c9e4f40029bf447b8cf8202b10dda177?x-expires=1700452800&x-signature=e6roUeTm4UWwAVal5ejDwreuKbo%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c001-tx/8ded99c9e4e24f199113ad703f983722/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=3708&bt=1854&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoI5IKQ_vjWrGsAhLrus&mime_type=video_mp4&qs=0&rc=OGdkOGU0aWY4NjxmOjs3aEBpM2lkZDxmOjo0NDMzMzczM0BjXy0wXzZjNi0xNV81YzAzYSNobmRtNmVjNmJgLS02MTZzcw%3D%3D&btag=e00008000&expire=1700454721&l=202311180431490034FCA58021B82E9B49&ply_type=2&policy=2&signature=26e234d6d5dd040780d1f0779f48c1f4&tk=tt_chain_token"}, "diggCount": 4400000, "shareCount": 215500, "playCount": 21300000, "commentCount": 87500, "mentions": []}
|
||||||
|
{"id": "6866140417822297349", "text": "\u26c8 #thunderstorm #highrise #manhattan #nyc #newyorkcity #apartments #newjersey #nightlife #freezeframe #tiktoktravel", "createTime": 1598647900, "createTimeISO": "2020-08-28T20:51:40.000Z", "authorMeta": {"id": "6802300746370876421", "name": "alex_is_grace", "nickName": "Alexis", "verified": false, "signature": "lil pisces \ud83c\udf19", "bioLink": null, "avatar": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/6ee3bb47219ec1f68c41b81d1b13c122~c5_720x720.jpeg?x-expires=1700452800&x-signature=YfKlH7PjUDykjrOTKyuJ1HHLFiA%3D", "privateAccount": false, "following": 206, "fans": 61100, "heart": 4700000, "video": 191, "digg": 88700}, "musicMeta": {"musicName": "Thunderstorm", "musicAuthor": "Rain", "musicOriginal": false, "playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tos-alisg-ve-2774/octKKByrVoONOiMytpivAAwupsdZgRIVs1B0We", "coverMediumUrl": "https://p16-sg.tiktokcdn.com/aweme/200x200/tos-alisg-v-2774/ocsApBZUUYAaGiOA8iw1BnCE8WKAvrq7qAoFE.jpeg", "musicId": "6751578297852758018"}, "webVideoUrl": "https://www.tiktok.com/@alex_is_grace/video/6866140417822297349", "videoMeta": {"height": 1024, "width": 576, "duration": 15, "coverUrl": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/8a803d1eb6a54614859e7cef01734443?x-expires=1700452800&x-signature=dgjLrjuN3lrfn%2BkA%2F9yLcDffztc%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-pve-0068-tx/e434714d6ccd4ab49533ae34f0e8cc98/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=2002&bt=1001&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoVKIKQ_vjlkjsAhLrus&mime_type=video_mp4&qs=0&rc=OWlmZ2Y4aGg0ZTtnODU2OUBpMzw3Z3JnNG1wdzMzZzczM0BjMDIvNC9hXi4xYDAzNjVjYSNeam40Y2dtcDFfLS1jMTZzcw%3D%3D&btag=e00008000&expire=1700454840&l=202311180433451FE70F787FC7C1324627&ply_type=2&policy=2&signature=27ffb48a90cd321670e109debdf5d975&tk=tt_chain_token"}, "diggCount": 379500, "shareCount": 22900, "playCount": 2800000, "commentCount": 4827, "mentions": []}
|
||||||
|
{"id": "6760874421524729094", "text": "Miley Cyrus is the nicest celebrity I\u2019ve ever met \ud83d\ude0d #mileycyrus #hannahmontana #smiler #miley #newyorkcity #manhattan", "createTime": 1574138751, "createTimeISO": "2019-11-19T04:45:51.000Z", "authorMeta": {"id": "6738498204125676549", "name": "jasonspiratos", "nickName": "Jason Spiratos", "verified": false, "signature": "", "bioLink": null, "avatar": "https://p19-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/ff4acf1b755179d1976ecebb1bff37ac~c5_720x720.jpeg?x-expires=1700452800&x-signature=9cpRoV1KQpf2it2yCz%2BuBZMGMnk%3D", "privateAccount": false, "following": 10, "fans": 42400, "heart": 2000000, "video": 1, "digg": 6495}, "musicMeta": {"musicName": "original sound", "musicAuthor": "Jason Spiratos", "musicOriginal": true, "playUrl": "https://v19.tiktokcdn-us.com/ce69b4a2b61755c5e0563ea6c93139ef/655892f5/video/tos/useast5/tos-useast5-v-27dcd7-tx/4cf23d59ca234d4b9b526a864945a7b3/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ds=5&ft=t5PLr-Inz7TU6KYZiyq8Z&mime_type=audio_mpeg&qs=13&rc=anA6czk6ZnU2NzMzNzU8M0BpanA6czk6ZnU2NzMzNzU8M0A1X2wvcjRnc2ZgLS1kMTZzYSM1X2wvcjRnc2ZgLS1kMTZzcw%3D%3D&l=2023111804322602455BB067E102332333&btag=e00008000&download=true", "coverMediumUrl": "https://p19-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/ff4acf1b755179d1976ecebb1bff37ac~c5_720x720.jpeg?x-expires=1700452800&x-signature=9cpRoV1KQpf2it2yCz%2BuBZMGMnk%3D", "musicId": "6760736058519931654"}, "webVideoUrl": "https://www.tiktok.com/@jasonspiratos/video/6760874421524729094", "videoMeta": {"height": 1024, "width": 576, "duration": 59, "coverUrl": "https://p16-sign.tiktokcdn-us.com/obj/tos-useast5-p-0068-tx/91c1ff912af743979c95f51548cc1d38_1659962689?x-expires=1700452800&x-signature=Qv2HkiZwxXdcBgzsfVV1lyBEMP4%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c004-tx/17c86b4c45d149e583691c302e0c0efa/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=4846&bt=2423&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoS1IKQ_vjmJZsAhLrus&mime_type=video_mp4&qs=0&rc=PDlmZ2c5ODhlODo8NTtpNkBpM2Y1a3FwdnZxcTMzOjczM0AtYi1fL2A1XzAxXl5jYGBgYSM2Y2MwbmpjMzZfLS0uMTZzcw%3D%3D&btag=e00008000&expire=1700454805&l=2023111804322602455BB067E102332333&ply_type=2&policy=2&signature=64b2e1e8e1d60e5743273d093b685e1c&tk=tt_chain_token"}, "diggCount": 1700000, "shareCount": 13000, "playCount": 9800000, "commentCount": 4748, "mentions": []}
|
||||||
|
{"id": "6837678931693292805", "text": "XOXO Gossip Girl #gossipgirl #xoxogossipgirl #gg #epic #woah #iconicscene #newyorkcity #whoisgossipgirl #netflix #gossipgirledit #foryoupage #fyp", "createTime": 1592021191, "createTimeISO": "2020-06-13T04:06:31.000Z", "authorMeta": {"id": "6740781145023251462", "name": "adventureswithcolleen", "nickName": "Adventures with Colleen", "verified": false, "signature": "Disney CM\nHappy Lifestyle & Confidence\n\ud83d\udccdOrlando, FL\nContact info & wish list \u2b07\ufe0f", "bioLink": null, "avatar": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/bc75b05347b0b66807ba0ca987f39b01~c5_720x720.jpeg?x-expires=1700452800&x-signature=FIxVUUCyCzYLl2s5XrRjF708HFI%3D", "privateAccount": false, "following": 590, "fans": 421200, "heart": 19300000, "video": 2409, "digg": 7852}, "musicMeta": {"musicName": "Name a more ICONIC scene colleenlepp", "musicAuthor": "Adventures with Colleen", "musicOriginal": true, "playUrl": "https://v19.tiktokcdn-us.com/9652368e50fe53f3e369ef395a36c5fe/6558933d/video/tos/useast5/tos-useast5-v-27dcd7-tx/ead0573e017f49349777965180572495/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TZYKYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=ZGc3Omc8ZTgzNWRkNjs7aUBpM3hrcTc2aWw4dTMzOjU8M0BiLV8yXzQzNTUxMmBhYjJiYSNwYDBhcmFkLmZfLS0vMTZzcw%3D%3D&l=20231118043338625246617D5BE4330656&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/bc75b05347b0b66807ba0ca987f39b01~c5_720x720.jpeg?x-expires=1700452800&x-signature=FIxVUUCyCzYLl2s5XrRjF708HFI%3D", "musicId": "6837678857479375622"}, "webVideoUrl": "https://www.tiktok.com/@adventureswithcolleen/video/6837678931693292805", "videoMeta": {"height": 1024, "width": 576, "duration": 59, "coverUrl": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/992b30d0669d4ec2910b976d09b3aafd_1592021195?x-expires=1700452800&x-signature=PG5kaRtAbs5Woc5FEJRTA0igCcw%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-pve-0068-tx/e0251bcecac845e0be49412cdbf988bc/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=2074&bt=1037&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8ZmoQKIKQ_vjeX7sAhLrus&mime_type=video_mp4&qs=0&rc=Zzo7ZTw6ZmU8NGk3Z2Y5NUBpanVrcTc2aTU4dTMzOjczM0BfYDYzL14tXy4xNTJjNC80YSNzXzBhcmFsLmZfLS0vMTZzcw%3D%3D&btag=e00008000&expire=1700454877&l=20231118043338625246617D5BE4330656&ply_type=2&policy=2&signature=503b241f0293c48916c6ce99ee088ef4&tk=tt_chain_token"}, "diggCount": 405600, "shareCount": 6212, "playCount": 2400000, "commentCount": 0, "mentions": []}
|
||||||
|
{"id": "7064675346595171630", "text": "We love money! #nyc #newyork #newyorkcity #gambling #sports #betting #sportsbettingtiktok #superbowl #citygirls #citylife", "createTime": 1644872909, "createTimeISO": "2022-02-14T21:08:29.000Z", "authorMeta": {"id": "6642069837281853446", "name": "georgeisnotfunny", "nickName": "georgeisnotfunny", "verified": false, "signature": "in the market for trinkets, knickknacks & chachkas\n\u2014\ngeorgeisnotfunny1@gmail.com", "bioLink": null, "avatar": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/32acb998bd8e09506782ade3d9b46fa8~c5_720x720.jpeg?x-expires=1700452800&x-signature=v1cf9Xx2vK0M888p50PCQxt3tBQ%3D", "privateAccount": false, "following": 108, "fans": 127900, "heart": 4600000, "video": 66, "digg": 483}, "musicMeta": {"musicName": "original sound", "musicAuthor": "georgeisnotfunny", "musicOriginal": true, "playUrl": "https://v16m.tiktokcdn-us.com/7332fe7e08b5a0d8d8b8340f42de24c4/65589319/video/tos/useast5/tos-useast5-v-27dcd7-tx/5dd5b69716a342ceae58e2d02270885f/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7TlYKYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=Nzc4aDg2PDc8NGc1ZWY6N0BpMzo3eDs6Zm1mOzMzZzU8NEAyL2MuYy9iXjQxMmAwL18xYSNgMDM1cjRfNjJgLS1kMS9zcw%3D%3D&l=20231118043316B2139CBCF14BAC3218F2&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/32acb998bd8e09506782ade3d9b46fa8~c5_720x720.jpeg?x-expires=1700452800&x-signature=v1cf9Xx2vK0M888p50PCQxt3tBQ%3D", "musicId": "7064675341750537006"}, "webVideoUrl": "https://www.tiktok.com/@georgeisnotfunny/video/7064675346595171630", "videoMeta": {"height": 658, "width": 360, "duration": 46, "coverUrl": "https://p16-sign.tiktokcdn-us.com/obj/tos-useast5-p-0068-tx/e44b2de3936340c6bd73ba4485de20a1_1644872910?x-expires=1700452800&x-signature=2w%2F4IwlPCS%2FVdp8MqRwOCHoqFfo%3D", "definition": "360p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c003-tx/6913e687b29743f796b6cb98af194eac/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C0%7C3&br=1174&bt=587&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=1&ft=_rKBMBnZq8ZmonKIKQ_vjzfGsAhLrus&mime_type=video_mp4&qs=0&rc=NTk5NTNlZzhoZWdoZTQ3NkBpamhrcmY6ZmdmOzMzZzczNEAyNS0xLTY1XjExLS41LTItYSNucmlucjRnNjJgLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454842&l=20231118043316B2139CBCF14BAC3218F2&ply_type=2&policy=2&signature=bfad4a5c58d7c0a796f7c5c4d7acfdf5&tk=tt_chain_token"}, "diggCount": 494700, "shareCount": 11800, "playCount": 1700000, "commentCount": 1284, "mentions": []}
|
||||||
|
{"id": "7125933824336448814", "text": "LET\u2019S GET SOME CHICKEN \ud83c\udf57 - FULL EPISODES ON IG @sidetalknyc #fyp #foryou #viral #newyork #nyc #newyorkcity #sidetalk #sidetalknyc", "createTime": 1659135761, "createTimeISO": "2022-07-29T23:02:41.000Z", "authorMeta": {"id": "6741965339380745221", "name": "sidetalknyc", "nickName": "Sidetalk", "verified": true, "signature": "New York\u2019s one-minute street show\nFULL EPISODES ON IG @sidetalknyc \ud83d\uddfd", "bioLink": null, "avatar": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1645987854565382~c5_720x720.jpeg?x-expires=1700452800&x-signature=fxjEeUtvVxvMlXOwyqQgv2m5sFw%3D", "privateAccount": false, "following": 2, "fans": 4400000, "heart": 78700000, "video": 198, "digg": 324}, "musicMeta": {"musicName": "original sound", "musicAuthor": "Sidetalk", "musicOriginal": true, "playUrl": "https://v19.tiktokcdn-us.com/7d91903635902616bce877a85af825f0/655892e7/video/tos/useast5/tos-useast5-v-27dcd7-tx/951cbd2cd2fc4f9c971e3eca4837aa94/?a=1233&ch=0&cr=0&dr=0&er=2&cd=0%7C0%7C0%7C0&br=250&bt=125&bti=NDU3ZjAwOg%3D%3D&ft=t5PLr-Inz7Tf6KYZiyq8Z&mime_type=audio_mpeg&qs=6&rc=OjlnNWY1ZWc7OmZnZGhlZ0BpanFoODo6Zjc5ZTMzZzU8NEA2Ml4yYS5eNmMxMTMuMTZfYSNwXzJqcjRnYmZgLS1kMS9zcw%3D%3D&l=20231118043302B2139CBCF14BAC3217D7&btag=e00008000&download=true", "coverMediumUrl": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1645987854565382~c5_720x720.jpeg?x-expires=1700452800&x-signature=fxjEeUtvVxvMlXOwyqQgv2m5sFw%3D", "musicId": "7125933797383883562"}, "webVideoUrl": "https://www.tiktok.com/@sidetalknyc/video/7125933824336448814", "videoMeta": {"height": 1024, "width": 576, "duration": 9, "coverUrl": "https://p16-sign.tiktokcdn-us.com/obj/tos-useast5-p-0068-tx/ff6333f496bb4257b702630f8a56675f?x-expires=1700452800&x-signature=%2FsbxjYAWOBx3dx7k7WH0X3laEt0%3D", "definition": "540p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c002-tx/fb4c73cab2f7419ca712477f58a66fb8/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=3752&bt=1876&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8Zmoc1IKQ_vjqupsAhLrus&mime_type=video_mp4&qs=0&rc=OzgzN2VnOztkPGk1PDZkO0BpM25rc2U6Zng5ZTMzZzczNEAwMi9jMTMzXmMxXjJjMDYzYSNjNGtvcjRvYWZgLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454791&l=20231118043302B2139CBCF14BAC3217D7&ply_type=2&policy=2&signature=af97df78454a68858d04634d5dacc35f&tk=tt_chain_token"}, "diggCount": 559100, "shareCount": 11300, "playCount": 4500000, "commentCount": 1368, "mentions": ["@sidetalknyc"]}
|
||||||
|
{"id": "7231261958329077034", "text": "ALL that CHEESE! \ud83e\uddc0\ud83e\udd69\ud83e\uddc0 Always find your perfect CHEESESTEAK at @fedoroffsroastpork! \ud83d\ude0f\ud83d\udd25 #nyc #cheese #cheesy #philly #cheesesteak #steak #sandwich #newyorkcity #brooklyn #food #foodie #5boroughfoodie #fyp ", "createTime": 1683659385, "createTimeISO": "2023-05-09T19:09:45.000Z", "authorMeta": {"id": "6885845156370220038", "name": "5boroughfoodie", "nickName": "5boroughfoodie", "verified": false, "signature": "\ud83c\udf74The BEST food in NYC & beyond!\ud83d\uddfd\n\ud83d\udcf7 @5boroughfoodie\nall original content\n\ud83d\udccdNYC", "bioLink": null, "avatar": "https://p16-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/302993af5c0de56029afdb328b19d6d3~c5_720x720.jpeg?x-expires=1700452800&x-signature=6XXakIPwSmiOZIHubSd1qftAjHU%3D", "privateAccount": false, "following": 53, "fans": 508500, "heart": 12000000, "video": 1217, "digg": 1657}, "musicMeta": {"musicName": "Bounce When She Walk", "musicAuthor": "Ohboyprince", "musicOriginal": false, "playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tos-alisg-ve-2774/ooRAIogYuzBFIHv41xfNAsyDVWswxAcJMUN4Oh", "coverMediumUrl": "https://p16-sg.tiktokcdn.com/aweme/200x200/tos-alisg-v-2774/1db8c2e693b34c74badce63b5cf9aca7.jpeg", "musicId": "7200065594014731054"}, "webVideoUrl": "https://www.tiktok.com/@5boroughfoodie/video/7231261958329077034", "videoMeta": {"height": 1280, "width": 720, "duration": 9, "coverUrl": "https://p16-sign.tiktokcdn-us.com/obj/tos-useast5-p-0068-tx/e4b3e025a838487d998bba602173c6a7_1683659387?x-expires=1700452800&x-signature=e2eQiuHiNj%2Fs4IOPh8eEMkqjeVk%3D", "definition": "720p", "format": "mp4", "downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c001-tx/ooh7xCICIBAtnU9aQyFwhR2rpAfwEmLzUQj8BL/?a=1988&ch=0&cr=3&dr=0&lr=tiktok_m&cd=0%7C0%7C1%7C3&cv=1&br=3630&bt=1815&bti=NDU3ZjAwOg%3D%3D&cs=0&ds=3&ft=_rKBMBnZq8Zmoi1IKQ_vjj8ZsAhLrus&mime_type=video_mp4&qs=0&rc=PDQ8NzZnO2g5Ojg4aWZpOkBpajc5O2U6Zng8azMzZzczNEA1NWAyMWM2NjMxXy0yNTU0YSM1amJvcjRfZGFgLS1kMS9zcw%3D%3D&btag=e00008000&expire=1700454780&l=202311180432516AED2E2BC2FA1D407FA5&ply_type=2&policy=2&signature=7d7168e8a33391e685b07455e1fb808d&tk=tt_chain_token"}, "diggCount": 681100, "shareCount": 12200, "playCount": 25700000, "commentCount": 4547, "mentions": ["@fedoroffsroastpork!"]}
|
||||||