AIエディタってどこまで作ってくれるの?後編

M10i
2025-06-19
2025-06-19

はい、M10iです。
前回はAIエディタのcursor君にTodoリストアプリを爆速で作ってもらいました。
AIエディタってどこまで作ってくれるの?前編

確かにいい感じに作ってくれましたね!
でも・・・実際の業務やお仕事で作るプログラムってそんなシンプルじゃないですよね?

データが複雑だったり、やりたいことを機能に落とし込むところや
専門的なコードを書いたりしないといけないこともあったり。

て事で、ふわっとしたお願いでどこまでやってくれるか試してみましょう☆

M10iが妄想してた小ネタで警察署の日々の検問情報をスクレイピングで集めて
地図に表示して検問情報アプリってできないかなー

っていうのをもっと簡単にして

ニュースサイトから事件や事故の情報をスクレイピングで集めて地図に表示

してみようと思います!
実用的かどうかは置いておいてw
※スクレイピングっていうのはWebサイトから欲しい情報を自動で集めてくる技術です。
htmlの構造は各サイトによって違うので対象のサイトのhtmlの構造を調査する必要があります。

ぱっと思いつくだけで以下のポイントが出てきますね。

  1. htmlの解析
  2. 事件・事故の情報の取得するためのテンプレート
  3. 地名と位置情報の紐づけ

この辺り、どう実装してくれるのでしょうか???
(M10iがまずめんどくさいなーって思ったのは地名と位置情報の紐づけですw)

では早速。
対象のニュースサイトは47newsさん
階層でローカルも扱っててrobots確認したところ/localnewsはchiikisaisei
以外のアクセスは禁止されてないです、わりとゆるい。

※こちらはサンプルコードなので毎秒アクセスするとかなるとダメと思います!
もしこのページを参考にされる際はそのあたり自己責任でお願いします。

大阪のページで確認。
htmlもそんなごちゃごちゃでもないので情報取れなくはなさそうですねっ47_1

それではお願いしまーす☆map1

おおー!必要なライブラリ、自動で選定してインストールしてくれます!
map2
なんやかんやをポチポチと・・・・
map3
あっという間に完成!!!!
前回と変わらず5分もたってないw
これで出来るなら本当に人間がコード書かなくてよくない?!
map4

それではサイトにアクセスしてみます!!!!!

どん!!!

map_web1

・・・・・ニュース何も出てない・・・・・orz

M10iのトキメキを返して・・・・

そりゃまぁそうだよね・・・(なにが)
って事で答え合わせしていきたいと思います。

scraper.py

import requests
from bs4 import BeautifulSoup
from datetime import datetime
import re
from geopy.geocoders import Nominatim

def scrape_47news():
    url = "https://www.47news.jp/localnews/area-osaka"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
   
    articles = []
    geolocator = Nominatim(user_agent="news_scraper")
   
    # ニュース記事の取得
    news_items = soup.find_all('div', class_='news-item')
   
    for item in news_items:
        title = item.find('h3').text.strip()
        content = item.find('p').text.strip()
        date_str = item.find('time').text.strip()
        published_date = datetime.strptime(date_str, '%Y-%m-%d %H:%M')
       
        # 地名の抽出(簡易的な実装)
        location = None
        location_pattern = r'[大阪府|大阪市|堺市|豊中市|吹田市|高槻市|枚方市|東大阪市|八尾市|寝屋川市|大東市|守口市|門真市|摂津市|茨木市|箕面市|池田市|和泉市|岸和田市|泉佐野市|泉大津市|貝塚市|泉南市|阪南市|松原市|羽曳野市|藤井寺市|富田林市|河内長野市|大阪狭山市|交野市|四條畷市|柏原市|太子町|河南町|千早赤阪村|能勢町|熊取町|田尻町|岬町|忠岡町].*?[市|区|町|村]'
        location_match = re.search(location_pattern, content)
        if location_match:
            location = location_match.group()
           
            # 位置情報の取得
            try:
                location_data = geolocator.geocode(location + ", 大阪府, 日本")
                if location_data:
                    articles.append({
                        'title': title,
                        'content': content,
                        'location': location,
                        'latitude': location_data.latitude,
                        'longitude': location_data.longitude,
                        'published_date': published_date,
                        'url': item.find('a')['href']
                    })
            except:
                continue
   
    return articles

①htmlの解析→×
class名でそれっぽく書いてくれてあるけど情報取れてないよ・・・
ここはどのタグに地名が入ってるかとか地味な調査部分だから仕方ない・・・のか?
実在しないclass名なあたりhtml読んでないのかな?な感じ

デバッグしてみると初手が空なので悲しい。
47_2
でも見た目から考えて当てにいってるっぽい?
太字h3ぽいし時間表示してるところもある。ここらへんはどうなんだろ
47_4
②事件・事故の情報の取得するためのテンプレート→×
事件や事故でアイコン変えたりするのかな?って思ってたけど多くを求め過ぎました。
そこに情報があるなら事件・事故だ!!!!って事ですねw

③地名と位置情報の紐づけ→△
ここどうするのかな?って思ってたらまさかのベタ書きwwww
そっかーとりあえずならそうだよねー
・・・そっかー・・・
で、そのままgeolocatorに投げるつけるための正規表現側に市とか府とかついてますね。
ちなページには「岸和田」「大阪」とあるので一致しません。残念。

で、ちょっと動くところまで修正してみました。

scraper.py

def scrape_47news():
    url = "https://www.47news.jp/localnews/area-osaka"

    response = requests.get(url)
    response.encoding = 'utf-8'
    soup = BeautifulSoup(response.text, 'html.parser')
    articles = []
    geolocator = Nominatim(user_agent="news_scraper")
    # ニュース記事の取得
    news_items = soup.find_all('a', class_='post_item')

    for item in news_items:
        title = item.find('div', class_='item_ttl').text.strip()
        content = title
        published_date = datetime.now()

        # 地名の抽出(簡易的な実装)
        location = None

        # 位置情報の取得
        try:
            # 漢字2、3文字を抽出
            location_match = re.findall(r'[一-龯]{2,3}', content)
            if location_match:
                # 最後の語だけ取り出す ホントはhitするまでまわしても
                city_name = location_match[-1] +"市" if location_match else None
                location = f"{city_name}市, 大阪府, 日本"
                location_data = geolocator.geocode(location, timeout=10)
                # 存在する地名なら採用
                if location_data and city_name in location_data.address:
                    articles.append({
                        'title': title,
                        'content': content,
                        'location': location,
                        'latitude': location_data.latitude,
                        'longitude': location_data.longitude,
                        'published_date': published_date,
                        'url': url
                    })
        except:
            continue

    return articles

M10iも適当人間なのでふわっとそれっぽいのが取れる程度の改修ですw

結果、無事表示されました!cssやhtmlのレイアウトはばっちりですね!

47_3

以上、AIエディタはどこまで作ってくれるの?後編でした。
今回M10iの指示がふわっとし過ぎというのもありますが、
コード読んでバグがどこか探せないとちょーっと厳しいですねぇ

M10iは過信しなければAIエディタはアリだと思います!まず速い!
実際に皆さんはどう思いました???

ではではM10iでした☆