Как публиковать новости в новостной ленте, просматривая ее по ключевому слову (например, заболеваниям), используя newsAPI? - PullRequest
0 голосов
/ 18 марта 2019

Вот мой код для новостной ленты. Я использовал newsAPI для получения новостей из разных новостных сетей.

Итак, я использовал techcrunch в качестве примера. Но я хочу использовать другую новостную сеть и показывать конкретные новости, используя ключевые слова (например, болезнь) в ленте новостей.

@IBOutlet weak var tableView: UITableView!

var articles: [Article]? = []
var source = "techcrunch"

override func viewDidLoad() {
    super.viewDidLoad()

    fetchArticles(fromSource: source)
}

func fetchArticles(fromSource provider: String){


    let urlRequest = URLRequest(url: URL(string: "https://newsapi.org/v2/top-headlines?sources=\(provider)-cn&apiKey=8dc336917a8044f5ba7df7ff787a7ccb")!)

    let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in

        if error != nil {
            print(error)
            return
        }

        self.articles = [Article]()
        do {
            let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject]

            if let articlesFromJson = json["articles"] as? [[String : AnyObject]] {
                for articleFromJson in articlesFromJson {
                    let article = Article()
                    if let title = articleFromJson["title"] as? String, let author = articleFromJson["author"] as? String, let desc = articleFromJson["description"] as? String, let url = articleFromJson["url"] as? String, let urlToImage = articleFromJson["urlToImage"] as? String {

                        article.author = author
                        article.desc = desc
                        article.headline = title
                        article.url = url
                        article.imageUrl = urlToImage
                    }
                    self.articles?.append(article)
                }
            }
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }

        } catch let error {
            print(error)
        }


    }

    task.resume()

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "articleCell", for: indexPath) as! ArticleCell

    cell.title.text = self.articles?[indexPath.item].headline
    cell.desc.text = self.articles?[indexPath.item].desc
    cell.author.text = self.articles?[indexPath.item].author
    cell.imgView.downloadImage(from: (self.articles?[indexPath.item].imageUrl!)!)

    return cell
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return (self.articles?.count) ?? 0
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let webVC = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "web") as! WebViewController

    webVC.url = self.articles?[indexPath.item].url

    self.present(webVC, animated: true, completion: nil)
}
let menuManager = MenuManager()
@IBAction func menuPressed(_ sender: Any) {

    menuManager.openMenu()
    menuManager.mainVC = self
}

}

расширение UIImageView {

func downloadImage(from url: String){

    let urlRequest = URLRequest(url: URL(string: url)!)

    let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in

        if error != nil {
            print(error)
            return
        }

        DispatchQueue.main.async {
            self.image = UIImage(data: data!)
        }
    }
    task.resume()
}

}

Пожалуйста, помогите мне сделать это. Я не знаю, как использовать newsAPI. Я только что посмотрел видео на YouTube, но нет никого, кто сделал бы то, что я хочу, чтобы произошло в моем приложении.

Заранее спасибо.

...