# iphone
提供两种获取最新版 iPhone 信息的方式:
- `latest()`:离线回退,返回发布时已知的最新版(稳定、无网络)。
- `fetch_latest()`:动态抓取,尝试从 Apple 官方页面解析型号、起售价与发布日期(需要网络)。
## 字段说明
返回结构体:
- `model: String` — 型号,如 `iPhone 17`
- `price_usd: Option<u32>` — 美元起售价(若解析失败则为 `None`)
- `release_date: Option<String>` — 发布会日期(`YYYY-MM-DD`,若解析失败则为 `None`)
## 使用方法
在你的 `Cargo.toml` 中加入:
```toml
[dependencies]
iphone = "0.1"
```
示例(离线回退):
```rust
fn main() {
let latest = iphone::latest();
println!(
"最新 iPhone: {},起售价: {:?},发布日期: {:?}",
latest.model,
latest.price_usd,
latest.release_date,
);
}
```
示例(动态抓取):
```rust
fn main() {
match iphone::fetch_latest() {
Ok(info) => println!(
"最新 iPhone: {},起售价: {:?},发布日期: {:?}",
info.model, info.price_usd, info.release_date
),
Err(e) => eprintln!("抓取失败,使用回退: {}", e),
}
}
```
## 实现思路与局限
- 通过访问 `https://www.apple.com/iphone/` 抽取页面中出现的最大编号 `iPhone XX` 作为最新型号,并匹配 `From $XXX` 作为起售价线索。
- 通过访问 `https://www.apple.com/newsroom/`,就近匹配含有 `iPhone` 的区域周围的 `time[datetime]` 字段,作为发布日期近似值。
- 不同地区/时区/页面变更可能导致解析失败或结果不准确;此时自动回退到 `latest()` 的静态值。
- 若 Apple 页面结构发生改变,解析逻辑可能需要随版本调整。
## 许可证
MIT